📂C/C++
🔖C++
2022-08-23 13:03阅读: 68评论: 0推荐: 0

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 中国大陆许可协议进行许可。

posted @   Oniisan_Rui  阅读(68)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起