static_cast,reinterpret_cast,const_cast,dynamic_cast
static_cast
基本数据类型和枚举类型之间的转换
可以将一种基础数据类型转换为另一种基础数据类型。例如,将 double 转换为 int,或将 float 转换为 double 等。
指向派生类的指针或引用转换为指向基类的指针或引用
指向基类的指针或引用转换为指向派生类的指针或引用
但这是不安全的,因为在转换过程中没有运行时检查。如果确实需要运行时检查,应使用 dynamic_cast。
reinterpret_cast
指针类型之间的转换
reinterpret_cast 可以在不同的指针类型之间进行转换。这种转换只是重新解释指针的位模式,而不进行类型检查。
指针和整数进行转换
const_cast
dynamic_cast
在没有多态类类型的转换中,编译器会提示报错。
dynamic_cast主要是用在进行下行转换(父类转换到子类)过程中的安全判定,上行转换(也就是子类转换为父类一定是安全的,例如下面代码中的情况3);如果出现一些不安全的转换,则返回值就是nullptr,例如下面代码中的情况2;下行转换什么情况下是安全的呢?例如,当父类指针指向子类对象时,然后将这个父类指针利用dynamic_cast转换为子类,这种情况是安全的,因为这个指针指向的对象就是子类,例如下面代码中的情况2。