static_cast dynamic_cast reinterpret_cast const_cast区别
定义上的区分
reinterpret_cast:将数据以二进制存在形式的重新解释
static_cast:静态转换,编译期间进行类型检查,不做运行时检查,效率高。
dynamic_cast:动态转换,运行时进行检查,效率较低,但安全性较高。
const_cast:去掉数据的const和volatile属性。
应用场景上
reinterpret_cast:指针和指针对应的地址值进行转换。
static_cast:
1.类的上行转换:推荐
2.类的下行转换:不推荐。安全性差,由于不进行类型检查,转换时得到不为null的指针,但无法使用对应类型的方法。
3.类的交叉转换:无法使用,编译报错。
dynamic_cast: 虽然安全,但依赖条件:由于需要进行运行时类型信息取得,因此类需要有虚函数。
这个应该不是太大问题,因为存在类继承的场合,基类的析构函数推荐使用虚函数。原因是防止内存泄漏。
具体为什么可能会导致内存泄漏感兴趣的同学请自行百度。
1.类的上行转换:与static_cast相同。
2.类的下行转换:推荐。转换失败时会得到空指针null
3.类的交叉转换:可以进行。
const_cast: 简言之就是去掉变量的const,volatile属性。