1 static_cast
静态转换。
1.1 类层次结构中基类和派生类之间指针和应用的转换
1.1.1 向上转型
就是把子类的指针或者引用转化成父类的指针或者引用,这样是安全的。
1.1.2 向下转型。
不管父类指针是否真的指向子类对象,一律把指针转型后返回。
转型不保证安全。
1.2 基本数据类型之间的转换
int转成char等等,安全不保障。
1.3 void指针转成目标类型的指针
无类型指针,可以指向任意类型的数据。
C++void详解
极其不安全。
2 dynamic_cast
动态转型操作符。
程序运行的时候进行处理。
2.1 向上转型
和static_cast相同。
也被称为隐式转换。
2.2 向下转型。
把父类指针转型成子类指针,如果转型成功(父类指针真的指向子类对象),返回子类对象的地址。
如果转型失败,返回NULL。
转型安全!
dynamic_cast<子类指针>(父类指针),用来检测父类指针是否可以转换成子类指针。
动态转型的时候必须要有virtual函数支持。
因为存在虚函数,才能说明它有想要让基类指针或者引用指向派生类对象的情况,这样动态转换才有意义。
P0是指向D1的,不能转成D2指针。
3 const_cast
删除变量的const、volatile属性,方便再次赋值。
在编译时期完成。
4 reinterpret_cast
仅重新解释类型,没有进行二进制的转换。
不同类型的指针类型转换。
总结
-去const属性用const_cast
-基本类型转换用static_cast
-多态类之间的类型转换用dynamic_cast
-不同类型的指针类型转换用reinterpret_cast