关于C++的四种强制类型转换
1、static_cast 静态类型转换
适合进行基本数据类型之间的转换。
不可以在有类型的指针内转换,但可以中间加void*过渡。 因为在运行时没有动态检查,如果指针类型与目标类型不匹配,编译器不会发出警告或错误,而使强制执行转换,可能导致不正确的结果或未定义的行为。
子类转换为父类安全,但父类转化为子类不安全,因为没有动态检查。
2、dynamic_cast 动态类型转换
有动态检查,父类转化为子类安全。但是父类中要有虚函数,用于存放运行时类型信息。当使用 dynamic_cast 进行类型转换时,它会在运行时使用虚指针和虚函数表来检查目标对象的实际类型是否与转换的目标类型匹配。它会沿着类层次结构逐级检查,以确保类型转换的安全性。如果类型匹配,则返回转换后的指针;如果类型不匹配,则返回空指针。
对引用进行 dynamic_cast,失败抛出一个异常,成功返回正常 cast 后的对象引用。
3、const_cast 常量转换
负责常量与非常量之间的转换
4、reinterpret_cast 不相关类型之间的转换
慎用,属于底层的直接转换。相当于C语言中的强转。

浙公网安备 33010602011771号