C++中的类型转换
C++中的类型转换
转化类型 | 定义 | 使用场景 | 特点 |
---|---|---|---|
static_cast | static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换 | 用于类层次结构中基类和派生类之间指针或引用的转换。注意: 上行转换(派生类—->基类)是安全的;下行转换(基类—->派生类)由于没有动态类型检查,所以是不安全的。用于基本数据类型之间的转换,如把int转换为char,这种带来安全性问题由程序员来保证 | 主要执行非多态的转换操作,用于代替C中通常的转换操作隐式转换都建议使用static_cast进行标明和替换 |
reinterpret_cast | reinterpret_cast操作符通常为操作数的位模式提供较低层次的重新解释,用于将一种类型转换为另一种不同的类型 | 不到万不得已,不用使用这个转换符,高危操作 | reinterpret_cast可以将整型转换为指针,也可以把指针转换为数组reinterpret_cast可以在指针和引用里进行肆无忌惮的转换 |
dynamic_cast | 命名上理解是动态类型转换 | 只有在派生类之间转换时才使用dynamic_cast,type-id必须是类指针,类引用或者void | 基类必须要有虚函数对于下行转换,dynamic_cast是安全的(当类型不一致时,转换过来的是空指针),而static_cast是不安全的(当类型不一致时,转换过来的是错误意义的指针,可能造成踩内存,非法访问等各种问题) |
const_cast | const_cast最常用的用途就是删除变量的const属性,方便赋值 | 常量指针转换为非常量指针,并且仍然指向原来的对象常量引用被转换为非常量引用,并且仍然指向原来的对象 | cosnt_cast是四种类型转换符中唯一可以对常量进行操作的转换符去除常量性是一个危险的动作,尽量避免使用 |
总结
-
去const属性用const_cast
-
基本类型转换用static_cast
-
多态类之间的类型转换用daynamic_cast
-
不同类型的指针类型转换用reinterpreter_cast
-
static_cast<>() 静态类型转换,编译的时c++编译器会做类型检查;基本类型能转换 但是不能转换指针类型
-
若不同类型之间,进行强制类型转换,用reinterpret_cast<>() 进行重新解释
-
C语言中 能隐式类型转换的,在c++中可用 static_cast<>()进行类型转换。因C++编译器在编译检查一般都能通过;C语言中不能隐式类型转换的,在c++中可以用 reinterpret_cast<>() 进行强行类型 解释。
-
static_cast<>()和 reinterpret_cast<>() 基本上把C语言中的 强制类型转换给覆盖reinterpret_cast<>()很难保证移植性。
-
dynamic_cast<>(),动态类型转换,安全的基类和子类之间转换;运行时类型检查
5)const_cast<>(),去除变量的只读属性
https://cloud.tencent.com/developer/article/2164386
https://www.rowlet.info/post/7#1. static_cast
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY