关于C++的四种强制类型转换
1、static_cast 静态类型转换
适合进行基本数据类型之间的转换。
不可以在有类型的指针内转换,但可以中间加void*过渡。 因为在运行时没有动态检查,如果指针类型与目标类型不匹配,编译器不会发出警告或错误,而使强制执行转换,可能导致不正确的结果或未定义的行为。
子类转换为父类安全,但父类转化为子类不安全,因为没有动态检查。
2、dynamic_cast 动态类型转换
有动态检查,父类转化为子类安全。但是父类中要有虚函数,用于存放运行时类型信息。当使用 dynamic_cast
进行类型转换时,它会在运行时使用虚指针和虚函数表来检查目标对象的实际类型是否与转换的目标类型匹配。它会沿着类层次结构逐级检查,以确保类型转换的安全性。如果类型匹配,则返回转换后的指针;如果类型不匹配,则返回空指针。
对引用进行 dynamic_cast,失败抛出一个异常,成功返回正常 cast 后的对象引用。
3、const_cast 常量转换
负责常量与非常量之间的转换
4、reinterpret_cast 不相关类型之间的转换
慎用,属于底层的直接转换。相当于C语言中的强转。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)