C++强制类型转换

C++同时提供了四种新的强制转型形式(通常称为新的或C++风格的强制转型):

const_cast(expression)

dynamic_cast(expression)

reinterpret_cast(expression)

static_cast(expression)

每一种适用于特定的目的。

 

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

 

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

 

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

 

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

 

旧风格的强制转型依然合法,但是新形式更可取。首先,在代码中它们更容易识别,这样就简化了在代码中寻找类型系统被破坏的地方的过程。第二,更精确地指定每个强制转型的目的,使得编译器诊断使用错误成为可能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值