const_cast(链接)

用来去掉const或volatile属性

  volatile:

  • 用于并行设备的硬件寄存器(状态寄存器),
  • 中断服务子程序中会访问到的非自动变量,
  • 多线程中被几个任务共享的变量

一般用来将常量指针变为非常亮指针, 常量引用变为非常量引用, 常量对象变为非常量对象

static_cast(链接

强制类型转换:(不含类型转换的安全检查)

子类指针转换为父类指针,父类指针可以转换为子类指针(但是不安全)

用于:

  • 类中基类和派生类指针和引用的转换
  • 基本类型转换(相当于c语言中的类型转换)
  • 空指针转换为目标类型的空指针
  • 任何类型转换为void类型
  • 不可以去掉const volatile expression类型

reinterpret_cast

仅仅重新解释类型,但没有进行二进制的转换:
1. 转换的类型必须是一个指针、引用、算术类型、函数指针或者成员指针。
2. 在比特位级别上进行转换。它可以把一个指针转换成一个整数,也可以把
一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成
原类型的指针,还可以得到原先的指针值)。但不能将非32bit的实例转成指
针。
3. 最普通的用途就是在函数指针类型之间进行转换。
4. 很难保证移植性。
例子:

  • int doSomething(){return 0;};
  • typedef void(*FuncPtr)();
  • //FuncPtr is 一个指向函数的指针,该函数没有参数,返回值类型为 void
  • FuncPtr funcPtrArray[10];
  • //10个FuncPtrs指针的数组 让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数
  • 的指针存入funcPtrArray数组:
  • funcPtrArray[0] = &doSomething;
  • // 编译错误!类型不匹配,reinterpret_cast可以让编译器以你的方法去看待它们:funcPtrArray
  • funcPtrArray[0] = reinterpret_cast<FuncPtr>(&doSomething);
  • //不同函数指针类型之间进行转换

用于以二进制形式重新解释类型,但是没有进行二进制的类型转换

dynamic_cast

有条件转换,动态类型转换,运行时类型安全检查(转换失败返回
NULL):
1. 安全的父类和子类之间转换。
2. 必须要有虚函数。
3. 相同父类不同子类之间的交叉转换。但结果是NULL。
例子:

class BaseClass
{
public:
int m_iNum;
virtual void foo(){};
};

基类必须有虚函数。保持多态特性才能使用dynamic_cast

总结
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用dynamic_cast。
不同类型的指针类型转换用reinterpret_cast

关于c++中的类型转换符的更多相关文章

  1. C++里的强制类型转换符reinterpret_cast、static_cast 、dynamic_cast、const_cast 区别

    C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的 ...

  2. [转]C++中四种类型转换符的总结

    C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression)    reinterpret_cast操 ...

  3. C++中的四种强制类型转换符详解

    阅读目录 C++即支持C风格的类型转换,又有自己风格的类型转换.C风格的转换格式很简单,但是有不少缺点的: 转换太过随意,可以在任意类型之间转换.你可以把一个指向const对象的指针转换成指向非con ...

  4. C语言中强制类型转换总结

    C语言中强制类型转换总结  ● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围 ...

  5. JS中数据类型转换

    JS中数据类型转换汇总 JS中的数据类型分为 [基本数据类型] 数字 number 字符串 string 布尔 boolean 空 null 未定义 undefined [引用数据类型] 对象 obj ...

  6. java中的修饰符和基本数据类型

    1.java中的修饰符 java中的修饰符主要是用来对类资源进行一个权限控制,上面表格表现的很清晰,无需多言. 2.java中的基本数据类型 java中的数据类型分为引用类型和基本类型.基本数据类型有 ...

  7. JAVA语言中的修饰符

    JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...

  8. JavaScript中数据类型转换总结

    JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...

  9. java中强制类型转换

    在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...

随机推荐

  1. 解决chrome浏览器插件开发者模式每次启动要确认弹出框的问题

    在日常工作中,我们经常会用到一些浏览器插件,有些插件因为没上架到浏览器的应用商店,只能以开发者模式运行,但是chrome浏览器出了限制,每次重新启动浏览器的时候,就会弹出该插件是否要禁止运行的对话框, ...

  2. Android组件化aar躺坑记:ButterKnife 报 元素值必须为常量表达式错误

    背景: 项目有需求,将自己写的模块作为一个module给到大项目使用,所以准备把自己的项目打包成aar包. 一.如何将独立项目打包成aar: 1.修改module下的application 为libr ...

  3. python 递归\for循环_斐波那契数列

    # 递归 def myAdd(a, b): c = a + b print(c) if c > 100: return return myAdd(a + 1, c) #最大递归深度是1000 m ...

  4. KEPServerEX 6 配置连接 Allen-Bradley MicroLogix 1400

    =============================================== 2019/7/28_第1次修改                       ccb_warlock == ...

  5. Json schema前奏 关于JSON

    目录 1. 何为 JSON 2. JSON 基本语法 3. JSON值的类型 4. 与XML比较 5. 辅助工具 1. 何为 JSON JSON( JavaScript Object Notation ...

  6. Java字节码扩展

    异常表 代码一: public class Test03 { public void test() { try { InputStream is = new FileInputStream(" ...

  7. 定时任务-Windows任务

    定时任务-Windows任务   什么是windows任务 windows系统自带一个任务管理组件.可以执行自己写的程序,发送电子邮件(需要邮件服务器),显示消息(就是桌面弹出一个窗口).用的最多的就 ...

  8. java基础 String

    标准格式:数据类型[] 数组名称 = new 数据类型[] {元素1,元素2,...};省略格式:数据类型[] 数组名称 = {元素1,元素2,...}; Scanner类实现的功能,可以实现键盘输入 ...

  9. java之mybatis之字段映射及多对一

    1. 数据库中表的列名和实体类的属性名称不一致. 可以使用 resultMap来解决. <select id="findAll" resultMap="UserMa ...

  10. docker安装mysql笔记

    首先 查找镜像 docker search mysql 拉取镜像 : docker pull mysql 拉取成功后,查看本地镜像: docker images 可以看到本地有两个镜像(redis是我 ...