C++提供了4种更安全的(显式)类型转换方式
相较于C风格的强制类型转换更安全
RTTI(Run Time Type Identification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。
任何编写程序时能够明确的类型转换都可以使用static_cast
由于不提供运行时的检查所以叫static_cast
主要使用场景包括
dynamic_cast会在运行时检查类型转换是否合法
由于运行时的检查所以会额外消耗一些性能
dynamic_cast使用场景与static_cast 相似
在类层次结构中使用,下行转换时
dynamic_cast会检查转换的类型,相比static_cast更安全
dynamic_cast转换仅适用于指针或引用
若指针转换失败则返回空指针,若引用转换失败则抛出异常
在类层次间进行转换时,要求类必须有虚函数成员(Why?)
const_cast用于移除类型的const、volatile和__unaligned属性
常量指针被转换成非常量指针并且仍然指向原来的对象
常量引用被转换成非常量引用并且仍然引用原来的对象
非常激进的指针类型转换
在编译期完成,可以转换任何类型的指针
极不安全,及其自由
适合转为字节等操作(?)