C++四种强制类型转换
-
static_cast
用法:static_cast<type-id>(expression)
把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性
用途:
1)类层级结构中基类(父类)和派生类(子类)之间指针或引用的转换
上下转换:派生类的指针或引用转换成基类,安全
下行转换:基类的指针或引用转换成派生类,由于没有动态类型检查,不安全
2)基本数据类型之间的转换,如:int转char,安全性由开发人员保证
3)空指针转换成目标类型的空指针
4)任何类型表达式转换成void类型
-
const_cast
用法:const_cast<type-id>(expression)
其中,type-id必须是引用或指针
-
reinterpret_cast
用法:reinterpret_cast<type-id>(expression)
其中,type-id必须是一个指针、引用、内置数据类型、函数指针或成员指针。
用途:
1)改变指针或引用的类型
2)将指针或引用转换成一个足够长度的整型
3)将整型转换为指针或引用类型
-
dynamic_cast
用法:dynamic_cast<type-id>(expression)
注:
1)运行时处理,运行时类型检查
2)不能用于内置基本数据类型的强制转换
3)type-id必须是指针或引用。转换成功返回指向类型的指针或引用。失败返回nullptr
4)类转换时,上行转换(派生类指针指向基类指针)安全,下行转换进行类型检查。比static_cast更安全。
5)基类中一定要有虚函数,否则编译不通过。因为运行时类型检查需要运行时类型信息。这个信息存储在类的虚函数表中。