设为首页 加入收藏

TOP

2.3.6 类型的兼容性
2013-10-07 14:57:00 来源: 作者: 【 】 浏览:61
Tags:2.3.6 类型 兼容性

2.3.6  类型的兼容性

一种类型的值一般不能存储到另一种类型的变量中。例如,大多数编译器会对以下语句报错:

  1. int int_variable;  
  2. int_variable = 2.99; 

这是因为类型不匹配。常量2.99是double类型,变量int_variable是int类型。遗憾的是,并非所有编译器都以相同的方式响应上述赋值语句。有的会显示一条错误消息,有的只是给出一条警告消息,有的编译器则完全无动于衷。然而,即使编译器允许这种赋值语句,但赋给变量int_variable的值可能是2,而非四舍五入之后的3。由于无法保证编译器允许这种赋值语句,所以要避免将double类型的值赋给int类型的变量。

将上述代码中的常量2.99用double类型的变量替换会出现同样的问题。对于以下赋值语句,大多数编译器都会报错:

  1. int int_variable;  
  2. double double_variable;  
  3. double_variable = 2.00;  
  4. int_variable = double_variable;  

虽然2.00无需四舍五入,但问题依然存在。2.00是double类型,而不是int类型。正如后文所述,可将对double_variable赋值时使用的2.00替换为2,但这样仍然无法让编译器正常赋值。变量int_variable和double_variable的类型不同,这才是关键。

即使编译器允许在赋值语句中混用不同类型,但大多数情况下都不应该这样做。这不利于程序的移植,而且会引起混淆。例如,如果编译器允许将2.99赋给int类型的变量,该变量获得的将是2,而不是2.99,这便产生了混淆,因为程序的意思是把2.99赋给变量。

一些特殊情况允许将一种类型的值赋给另一种类型的变量。将int类型的值赋给double类型的变量是允许的。例如,以下语句既是有效的,也是合乎情理的:

  1. double double_variable;  
  2. double_variable = 2

以上语句将double_variable变量的值设为2.0。

虽然不建议这样做,但确实可以将int值(如65)保存到char类型的变量中。另外,还可将字母(如'Z')保存到int类型的变量中。从多方面考虑,C语言将字符视为小整数值。遗憾的是,C++(www.cppentry.com)从C沿袭了这一点。之所以选择这样做,是因为char类型的变量占用的内存比int类型少。所以,用char类型的变量进行计算可以节省一些内存。不过,更清晰的方案是在操作整数时使用int类型,操作字符时使用char类型。

一般的规则是,不要将一种类型的值放到另一种类型的变量中--虽然违反这个规则的情况似乎多于遵守这个规则的情况。无论如何,即使编译器没有非常严格地贯彻这一规则,你也应该主动遵守它。将一种类型的数据放入另一种类型的变量中可能造成问题。因为值必须转换成相应类型的值,但转换后的值可能不是你所希望的。

bool类型的值可以赋给整数类型(short,int和long)的变量,整数也可以赋给bool类型的变量。但这样做不好,应尽量避免。考虑到知识的全面性,并帮助你阅读其他人写的代码,我们打算说具体一点:赋给bool类型的变量时,任何非零的整数都将保存为bool值true,值0则保存为bool值false。反之,将bool值赋给整数变量时,true作为1来存储,false则作为0来存储。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.3.1 int类型和double类型 下一篇2.2.6 用cin进行输入

评论

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