c++中的四种类型转换操作符

Dynamic_cast主要用于执行“安全的向下转型”。也就是说,要确定一个对象是否是一个继承体系中的一个特定类型。它是唯一不能用旧风格语法执行的强制类型转换,也是唯一可能有重大运行时代价的强制转换。

Static_cast可以被用于强制类型转换(例如,non-const对象转换为const对象,int转换为double,等等),它还可以用于很多这样的转换的反向转换(例如,void*指针转换为有类型指针,基类指针转换为派生类指针)。但是它不能将一个const对象转换为一个non-const对象(只有const-cast能做到)。它最接近于C-style的转换。

Const_cast一般用于强制消除对象的常量性。它是唯一能做到这一点的C++风格的强制类型。

Reinterpret_cast是特意用于底层的强制转换,导致实现依赖(implementation-dependent)(就是说,不可移植)的结果。例如,将一个指针转型为一个整数。这样的强制转换在底层代码以外应该极为罕见。

旧风格的强制类型依然合法,但是新的形式更可取。首先,在代码中他们更容易识别(无论是人还是像grep这样的工具都是如此),这样就简化了在代码中寻找类型系统被破坏的地方的过程。第二,更精确地制定每一个强制转换的目的,使得编译器诊断使用错误成为可能。例如,如果你试图使用一个const_cast以为的新风格强制类型来消除常量性,你的代码将无法编译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值