1.static_cast 与 dynamic_cast:
Animal* animal02 = static_cast<Animal*>(dog01);
Animal* animal02 = dynamic_cast<Animal*>(dog01);
static_cast支持基础类型和具有继承关系的上下行转换(指针和引用),不安全,dynamic_cast具有安全检查,不允许基础类型和具有继承关系的下行转换(将父类转换成子类)
char a = 'a';
double b = static_cast<double>(a);
都不支持类指针的无继承关系的转换
2. 常量转换(const_cast)
该运算符用来修改类型的const属性。。将常量的转换成非常量的
- 常量指针被转化成非常量指针,并且仍然指向原来的对象;
- 常量引用被转换成非常量引用,并且仍然指向原来的对象;
- 注意:不能直接对非指针和非引用的变量使用const_cast操作符去直接移除它的const.如
const int a = 10; //不能对非指针或非引用进行转换
//int b = const_cast<int>(a); }
3.reinterpret_cast:(重新解释转换)
这是最不安全的一种转换机制,最有可能出问题。
主要用于将一种数据类型从一种类型转换为另一种类型。
它可以将一个指针转换成一个整数,也可以将一个整数转换成一个指针.