C++强制类型转换
const_cast
去除指针或者引用的const属性
- 转化常量指针为非常量指针,并且仍指向原来的对象
- 转化常用引用为非常量引用,并且人指向原来的对象
- 一般用于修改指针
static_cast
转换数据类型,类的上下行转换。
- 转换数据类型,由于没有运行时类型检擦来保证转换的安全性,不安全
- 类的上下行转换,由于没有运行时类型检擦来保证转换的安全性,不安全
- static_cast不能去除原有const volatile, __unaligned属性
- 转换失败会发生编译错误
C++的任何的隐式转换都使用static_cast转换
dynamic_static
安全的上下行转换。
上行转换(子类到基类的指针转换),dyanmic_cast成功转换,运行正常且输出预期结果。而下行转换,dynamic_cast在转换时不报错,但是输出是空指针,RTTI在运行期间进行了类型检查,是安全的,于是输出是null
reinterpret_cast
进行无关类型转换
用在任意的指针间的转换,任意引用间的转换,指针和足够大的整形之间的转换,整形到指针的转换。
失败回发生编译错误。