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属性。

 

posted @ 2022-01-06 13:07  ~星辰0111~  阅读(272)  评论(0编辑  收藏  举报