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属性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!