C++ 类型转换

static_cast

  • 只提供编译时的类型检查,没有运行时类型检查。完全不相干类型之间的转换是不允许的,编译器会报错。
  • 进行上行转换(把子类的指针或引用转换成基类表示)是安全的;
  • 虽然也允许进行下行转换(把基类指针或引用转换成子类表示)时,但由于没有动态类型检查,所以是不安全的。
  • 用于基本数据类型之间的转换,支持占用不同存储空间的基本类型的转化,但这种转换的安全性也要开发人员来保证。
  • 支持void*和目标类型间的相互转换。

dynamic_cast

  • 有运行时类型检查。被转换的类型必须是多态类型,即必须公有的继承自其它类,或拥有虚函数(继承自其它类或自己定义的);因为是运行时类型检测,所以完全不相干类型间的转换也是允许的,编译器不会报错,但转换结果是NULL
  • 根据第1条也就知道dynamic_cast不支持基本数据类型之间的转换。
  • 同样根据第1条也就知道了dynamic_cast不支持将void*转换为目标类型,仅支持将目标类型转换为void*.

const_cast

  • 移除const和volatile修饰符。

reinterpret_cast

reinterpret,美式发音为[ˌriɪnˈtɜrprɪt]

  • C++里的强制类型转换符。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

china_jeffery

你的鼓励是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值