C++编程习惯:尽量少做转型动作

C++规则的设计目标之一是,保证“类型错误”绝不可能发生。理论上如果你的程序”很干净“通过编译,就表示它并不企图在任何对象身上执行任何不安全、无意义、愚蠢荒谬的操作。这是一个极具价值的保证,可别草率地放弃它。
       不幸的是,转型(casts)破坏了类型系统(type system)。那可能导致任何种类的麻烦,有些容易辨识,有些非常隐晦。如果你来自C,Java或C#阵营,请特别注意,因为那些语言中的 转型(Casting)比较必要而无法避免,也比较不危险(与C++相比较),但C++不是C,也不是Jave或C#。在C++中转型是一个你会想带着极大尊重去亲近的一个特性。
C++提供四种新式转型(常常被称为new-style或C++ -style casts):
const_cast:通常被用来 将对象的常量性转移(cast away the constness)。它也是唯一有此能力的C++ -style转型操作符。
dynamic_cast:主要用来执行 “安全向下转型”(safe downcasting),也就是用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型多动作。
reinterpret_cast: 意图执行低级转型,实际动作(及结果)可能取决于编译器,这也就是表示它不可移植。例如将一个pointer to int 转型为一个Int。这一类转型在低级代码以外很少见。
static_cast:用来强迫隐式转换(implicit conversions),例如 将non-const对象转为const对象,或将int转为double等等。也是用来执行上述多种转换的反向转换。例如将void*指针转为typed,将 pointer-to-base转为 pointer-to-derived。但它无法将const转为non-const——这个只有const_cast才办得到。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值