关于C++的四种强制类型转换

1、static_cast 静态类型转换

  适合进行基本数据类型之间的转换。

  不可以在有类型的指针内转换,但可以中间加void*过渡。 因为在运行时没有动态检查,如果指针类型与目标类型不匹配,编译器不会发出警告或错误,而使强制执行转换,可能导致不正确的结果或未定义的行为。

  子类转换为父类安全,但父类转化为子类不安全,因为没有动态检查。

2、dynamic_cast 动态类型转换

  有动态检查,父类转化为子类安全。但是父类中要有虚函数,用于存放运行时类型信息。当使用 dynamic_cast 进行类型转换时,它会在运行时使用虚指针和虚函数表来检查目标对象的实际类型是否与转换的目标类型匹配。它会沿着类层次结构逐级检查,以确保类型转换的安全性。如果类型匹配,则返回转换后的指针;如果类型不匹配,则返回空指针。

  对引用进行 dynamic_cast,失败抛出一个异常,成功返回正常 cast 后的对象引用。

3、const_cast 常量转换

  负责常量与非常量之间的转换

4、reinterpret_cast 不相关类型之间的转换

  慎用,属于底层的直接转换。相当于C语言中的强转。

 

posted @   YangYi1715  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示