C++强制类型转换
强制类型转换
旧风格的强制转型
- (typename) value 来自C语言。
- typename(value) 纯粹的C++格式
使用C++的类型转换符
static_cast
static_cast < 新类型 > ( 表达式 )
- 适用场景:低风险转换
- 基本数据类型之间的转换,如把int转换成char。明确隐式转换。
- 用于类层次结构中基类和子类之间指针或引用的向上转换。向上转可以,向下转不可以。由于没有动态类型检查,向下转换所以是不安全的。
- 空指针与其他指针的转换。把void指针转换成目标类型的指针(不安全)。把任何类型的表达式转换成void类型。
dynamic_cast
dynamic_cast < 新类型 > ( 表达式 )
- 会增加额外开销,非必要不使用。
- 在运行期检测是否能安全转换,不能则返回空。能够检测出被检测指针的类型。
- 通过查询RTTI信息
- 适用场景,基类(基类必须含有虚函数)与派生类指针与引用之间的向下转换。
- 基类指针或引用转换成派生类指针或引用。向下转换
const_cast
const_cast < 新类型 > ( 表达式 )
- 用于去除const、volatile属性
- const 该值不可修改
- volatile 每次读取该变量的值都重新从内存中读取(不能重复使用放在cache中的备份),且不对该变量进行优化。
- 新类型只能是指针、引用、this指针。
- 如常成员函数里面的this指针,去除第一个const后,就能修改对象内容了。
reinterpret_cast
reinterpret_cast < 新类型 > ( 表达式 )
- reinterpret_cast是进行高风险转换,比如整型转换成指针,但不能将函数指针转换成数据指针。
- 显示强转,后果自负。
本文作者:oniisan
本文链接:https://www.cnblogs.com/oniisan/p/x_cast.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步