设为首页 加入收藏

TOP

3.9.1 安全类型转换
2013-10-07 12:56:30 来源: 作者: 【 】 浏览:81
Tags:3.9.1 安全 类型 转换

3.9 类型安全

每个对象在定义时被分配一个类型。对于一个程序或程序的一个部分, 如果使用的对象符合它们规定的类型, 那么它们是类型安全的。不幸的是, 有很多执行操作的方式不是类型安全的。例如, 在一个变量没有初始化之前使用它, 则认为不是类型安全的:

 

当使用没有初始化的x时, 一个实现甚至被允许出现一个硬件错误。记得初始化你的变量!这个规则的例外只有很少(非常少), 例如我们立即将一个变量作为输入操作的目标, 但是记住初始化变量是一个好习惯, 它会为我们减少很多的麻烦。

完全的类型安全是最为理想的, 因此它对语言来说应是一般规则。不幸的是, C++(www.cppentry.com)编译器不能保证完全的类型安全, 但是通过良好的编码训练和运行时检查, 我们可以避免违反类型安全。理想状态是永远不要使用编译器也不能保证是安全的语言功能: 静态类型安全。不幸的是, 这对于大多数有趣的编程(www.cppentry.com)应用过于严格。一种显然的退而求其次的方法是, 由编译器隐式生成代码, 检查是否有违反类型安全的情况并捕获它们, 但这已超出了C++(www.cppentry.com)的能力。当我们决定做(类型)不安全的事时, 我们必须自己做相应的检查工作。当我们在本节中遇到这种情况时, 我们将会指出来。

类型安全的思想在编写代码时非常重要。这是我们在前面章节花费时间介绍它的原因。请注意陷阱并避开它们。

3.9.1 安全类型转换

在3.4节中, 我们发现不能直接将char相加, 或者将一个double与一个int比较。但是, C++(www.cppentry.com)提供间接方式来完成这些操作。在有必要时, 一个char可以转换成一个int, 而一个int也可以转换成一个double。例如:

 
这里的i1和i2都被赋值为120, 它是字符′x′在大多数常见的8比特字符集(例如ASCII)中的整数值。这是一个简单和安全的方法, 通过它可以获得一个字符的数字表示。由于没有信息丢失, 我们称这种char int的转换为安全的。也就是说, 我们可以将int结果拷贝到一个char中, 并且得到原始的值:
 
这里将会打印
 
在这种情况下, 一个值总是被转换成一个等价的值, 或者一个最接近等价的值(对于double), 那么这些转换就是安全的:
 
最常用的转换是从int到double, 这是由于它允许在表达式中混合使用int和double:
 
对于一个确实很大的整数, 当它被转换成double时, 我们(在有些计算机中)可能承受一些精度上的损失。这种情况不是很常见。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.8 类型和对象 下一篇3.9.2 不安全类型转换

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: