C++中有四种显式类型转换,分别为static_cast, dynamic_cast, const_cast, reinterpret_cast。
static_cast
主要用于:
- 基本类型的转换,比如int转char
- 类的上行转换,子类的指针或者引用转换为父类,是安全的。
- 类的下行转换,父类的指针或者引用转换为子类,不安全,没有类型检查。
dynamic_cast
主要用于类的指针或者引用的转换:
- 类的上行转换,子类的指针或者引用转换为父类,是安全的。
- 类的下行转换,父类的指针或者引用转换为子类。因为有类型检查,所以是安全的。但类型检查需要运行时类型信息,这个信息位于虚函数表中,所以必须要有虚函数。
const_cast
主要用于改变类型的常量属性:
- 常量指针转换为非常量指针。
- 常量引用转换为非常量引用。
- 常量对象转换为非常量对象。
reinterpret_cast
用于非关联类型的转换,操作结果是一个指针到其他指针类型的二进制拷贝,没有类型检查。