static_cast

静态转型的用途

  • 与dynamic_cast不同,static_cast不仅可以用于指针和引用,还可以用于其他型式
  • 一般用于非类型式的普通数据对象转型

静态转型的问题

  • 不进行运行期型式检查,不安全
  • 若转型失败,结果无定义

const_cast

常量转型的目的

  • 用于取消或者设置量的const状态(如设置为const或者取消const)

常量转型的问题

  • 如果原始数据对象不能写入,则取消常量修饰可能会导致未知的结果

例子:

#include <iostream>

class ConstCastTest
{
public:
void SetNum(int num) { _num = num; }
void PrintNum() const;
private:
int _num;
}; void ConstCastTest::PrintNum() const
{
//临时取消常量约束,修改目标对象的内容
//this指向const ConstCastTest*,指向常对象的指针
const_cast<ConstCastTest*>(this)->_num--;
std::cout << _num;
}

reinterpret_cast

复诠转型的目的

  • 将任意型式的数据对象转型为目标型式,即重新解释其位序列的意义
  • 可以用于整型与指针型的互转

复诠转型的问题

  • 由程序员保证重新解释的数据对象是否有意义,编译器简单按照目标型式理解该存储区的内容
  • 注意:在64位操作系统中,指针可能为64位,而整型可能为32位,复诠转型有可能丢失数据或者得到错误结果

例子:

#include <iostream>
using namespace std; int f(void *p)
{
unsigned int n = reinterpret_cast<unsigned int>(p);
return n;
} int main()
{
int a[] = { ,,,,,,, };
int n = f(a);
cout << n << endl;
}

C++学习笔记29:运行期型式信息2的更多相关文章

  1. C++学习笔记28:运行期型式信息

    RTTI 运行期标识对象的型式信息 优势:允许使用指向基类的指针或引用自如地操作派生类的对象 typeid:获取表达式的型式:type_info:型式信息类 头文件:typeinfo 对象转型模板 d ...

  2. thinking in java学习笔记:14章 类型信息

    14.2 Class 对象 https://github.com/zhaojiatao/javase 1.什么是Class对象,Class对象是用来做什么的? Class对象是java程序用来创建类的 ...

  3. 【视频编解码·学习笔记】11. 提取SPS信息程序

    一.准备工作: 回到之前SimpleH264Analyzer程序,找到SPS信息,并对其做解析 调整项目目录结构: 修改Global.h文件中代码,添加新数据类型UINT16,之前编写的工程中,UIN ...

  4. [原创]java WEB学习笔记29:Cookie Demo 之自动登录

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. jvm虚拟机笔记<六> 运行期优化

    这节我们总结一下JVM运行期的优化问题. https://www.cnblogs.com/zhouyuqin/p/5224573.html JVM运行期优化 即时编译器(JIT) 编译对象与触发条件 ...

  6. 【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图

    无论学习.只看不练是坏科学. 因此,要总结回想这怎么生产MMROPG小地图的游戏.于MMROPG游戏类,在游戏世界中行走时导致各地,通常在屏幕的右上角,将有一个区域,以显示当前的游戏场景微缩.在游戏世 ...

  7. 【视频编解码·学习笔记】13. 提取PPS信息程序

    PPS结构解析 与之前解析SPS方式类似 一.定义PPS类: 在3.NAL Unit目录下,新建PicParamSet.cpp和PicParamSet.h,在这两个文件中写入类的定义和函数实现. 类定 ...

  8. PHP全栈学习笔记29

    前言 这一章主要讲一讲PHP的背景,优势,PHP的环境搭建,书写和调式简单的PHP代码,如何解决简单的PHP错误等. 目录结构 PHP简介 PHP是面向对象,指令式编程,设计者是 拉斯姆斯·勒多夫 出 ...

  9. C++学习笔记30:模板与型式参数化

    转型操作 接受目标型式作为模板参数 Programmer *p = dynamic_cast<Programmer*>(e) 模板工作原理 使用template<typename T ...

随机推荐

  1. eclipse 高亮代码

    本文整合自网络上的两种靠谱的使eclipse代码高亮的方式. 其实你可以在Window->proferences->java->editor->syndex coloring- ...

  2. 【Python】【学习笔记】1.快速入门

    1.软件安装 从官网下载相应版本的安装包,一般不大. https://www.python.org/ 安装一路默认即可 2. 参考教程:快速入门:十分钟学会Python 本文的内容介于教程(Totur ...

  3. 用markdown学习写出总结

    # PS### 快捷键:CTRL+N(新建)CTRL+1. **切片**- 套索,磁性套索,椭圆,矩形选框.2. **印章** 仿制图章工具,图案图章工具3. 钢笔4. 油漆桶5. 吸管工具, *** ...

  4. java.net.UnknownHostException: Unable to resolve host "api102.meishi.cc": No address associated with hostname

    有三个原因: 清单文件Mei加网络访问权限 在主线程中执行了耗操作 你没开wifi

  5. 常见JDBC连接数据库字符串

    1.Mysql 驱动类:com.mysql.jdbc.Driver 连接字符串:jdbc:mysql://localhost:3306/dbname 2.Oracle 驱动类:oracle.jdbc. ...

  6. Unbalanced calls to begin/end appearance transitions for **

    在自定义UITabBarController中点击视图跳转的时候,有可能就出现这个问题, 解决方法就是在自定义的UITabBarController中的视图显示消失通知方法中添加如下方法: - (vo ...

  7. 例子:Basic Lens sample

    本例演示了如何自己扩展一个Camera Lens. 1. UI界面是一个MediaViewer <controls:MediaViewer x:Name="MediaViewer&qu ...

  8. 数据类型int、bigint、smallint 和 tinyint范围

      bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. int ...

  9. 【转】jQuery获取Select option 选择的Text和Value

    获取一组radio被选中项的值:var item = $('input[name=items][checked]').val();获取select被选中项的文本:var item = $(" ...

  10. Tapestry

    Tapestry1)概述:Tapestry 是一个全面web application 框架,是使用JAVA 写的.Tapestry 不是一个application server,Tapestry 是一 ...