作用:为了克服C中强制类型转化带来的风险,C++引入的四种更加安全的强制类型转换运算符(明确转换的目的,偏于程序的维护和分析)
- const_cast
const char *p; char *p1 = const_cast<char*>(p);
- 去除const属性,将只读变为可读写
- 针对常量指针,常量引用和常量对象
- static_cast(用于强制隐式转换)
- 内置数据类型之间的转换,int 转double,char转int
- 基类指针与派生类指针的转换,只能转换有继承或派生关系的类
- 把void类型指针转换为目标类型的指针
// 整形转浮点型 int a = 10; double b = static_cast<double>a; //基类指针转派生类 class A{}; class B : public A{}; A *pA = new A; B *pB = static_cast<B*>(pA);
- reinterpret_cast
- C++peimer中的解释是为运算对象的位模式提供较低层次上的重新解释
- 用于底层的强制转型,依赖于机器,一般使用较少
- dynamic_cast
- dynamic_cast是运行时处理的,而其他三种转换都是编译时处理的
- 不能用于内置数据类型之间的转换
- dynamic_cast在进行上行转换时和static_cast效果是一样的,但是进行下行转换时会进行类型检查,比static_cast更加安全,下行转换是否成功取决于转换对象的实际类型与目标类型是否相同
- 要求基类必须要有虚函数
- 若转换成功,返回的是指向类的指针或引用,不成功返回NULL
希望我的分享能帮到你~如果觉得不错,也可以三连走一波~~~