概述
C++类型转换
C++类型转换主要分为两种:隐式类型转换、显式类型转换(强制类型转换)。
隐式类型转换
各种情况的隐式类型转换,都满足了一个基本原则:由低精度向高精度的转换。
显式类型转换(强制类型转换)
四种强制类型转换操作符:static_cast、const_cast、reinterpret_cast、dynamic_cast。
转换类型操作符 | 作用 |
---|---|
static_cast | 无条件转换,静态类型转换 |
const_cast | 去掉类型的 const 或 volatile 属性 |
reinterpret_cast | 仅重新解释类型,但没有进行二进制的转换 |
dynamic_cast | 借助 RTTI,用于类型安全的向下转型 |
static_cast 静态类型转换
所谓的静态,即在编译期内即可决定其类型的转换,用的也是最多的一种。
- 基本数据类型间的转换,例如 short 转 int
- void 指针和具体类型指针之间的转换,例如 void* 转 int*、char* 转 void* 等;
- 不能用于无关类型之间的转换
const_cast 去掉const属性转换
去掉类型的const或volatile属性(基本没啥用)
reinterpret_cast 重新解释类型转换
最普通的用途就是在函数指针类型之间进行转换。
可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针
(风险很高)
dynamic_cast 子类与父类之间的多态类型准换
其他三种都是编译时完成的。dynamic_cast是运行时处理的,运行时要进行类型检查。
dynamic_cast
转换成功:返回的是指向类的指针或引用。
转换失败:返回NULL(指针)或 bad_cast 异常(引用)。
向上转换:将派生类赋值给基类
在向上转换时,安全,无需 RTTI ,此时 dynamic_cast 和 static_cast 的效果是一样的。
向下转型:将基类赋值给派生类
向下转型是有风险的,dynamic_cast 会借助 RTTI 信息进行检测,确定安全才能转换成功,否则就
转换失败。
dynamic_cast 会在程序运行过程中遍历继承链,如果途中遇到了要转换的目标类型,那么就能够转换成功,如果直到继承链的顶点(最顶层的基类)还没有遇到要转换的目标类型,那么就转换失败。对于同一个指针,它指向的对象不同,会导致遍历继承链的起点不一样,途中能够匹配到的类型也不一样,所以相同的类型转换产生了不同的结果。
最后
以上就是动人大侠为你收集整理的C++类型转换整理C++类型转换的全部内容,希望文章能够帮你解决C++类型转换整理C++类型转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复