c++四种强制转换类型函数
使用方法
static_cast<目标数据类型>原数据类型
const_cast<目标数据类型>原数据类型
reinterpret_cast<目标数据类型>原数据类型
dynamic_cast<目标数据类型>原数据类型
static_cast< T >( )
-
基类和派生类之间的转换
上行转换(将派生类的指针或者引用转换为基类表示),这一步是安全的。
下行转换(将基类的指针或者引用转换为派生类表示),这一步函数不会自动检测是否可以转换,需要开发人员自行控制安全性。
-
基本数据类型之间的转换
如int
和char
之间的转换,因为强制转换有时候会意味着精度丢失/转到无符号类型结果错误
,所以这一步需要开发人员自己控制正确性和安全性
。 -
空指针转换到其他类型指针
-
任意类型型表达式转换为void类型
这一步目前没考虑出有什么用处
const_cast< T >( )
用于强制转换指针或者引用的const或volatile限制,特别注意的是,const_cast不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用
。
常量指针被转化成非常量指针,并且仍然指向原来的对象
常量引用被转换成非常量引用,并且仍然指向原来的对象
reinterpret_cast< T >( )
reinterpret_cast运算符用于处理无关类型之间的转换
,他会产生一个新的值,这个值会有与原始参数(原数据类型)完全相同的比特位
dynamic_cast< T >( )
-
其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。
-
基类和派生类之间的转换
上行转换,派生类指针或者引用转换为基类(安全的)
下行转换,基类指针或者引用转换为派生类(安全的),执行时会有类型检查,如果指针指向的对象的实际类型和目标类型相同就会转换成功,转换失败会返回NULL。