设为首页 加入收藏

TOP

4.11 类型转换
2013-10-07 16:28:57 来源: 作者: 【 】 浏览:108
Tags:4.11 类型 转换

4.11  类型转换

C++(www.cppentry.com)语言中,某些类型之间有关联。如果两种类型有关联,那么当程序需要其中一种类型的运算对象时,可以用另一种关联类型的对象或值来替代。换句话说,如果两种类型可以相互转换(conversion),那么它们就是关联的。

举个例子,考虑下面这条表达式,它的目的是将ival初始化为6:
 

  1. int ival = 3.541 + 3; // 编译器可能会警告该运算损失了精度  

加法的两个运算对象类型不同:3.541的类型是double,3的类型是int。C++(www.cppentry.com)语言不会直接将两个不同类型的值相加,而是先根据类型转换规则设法将运算对象的类型统一后再求值。上述的类型转换是自动执行的,无须程序员的介入,有时甚至不需要程序员了解。因此,它们被称作隐式转换(implicit conversion)。

算术类型之间的隐式转换被设计得尽可能避免损失精度。很多时候,如果表达式中既有整数类型的运算对象也有浮点数类型的运算对象,整型会转换成浮点型。在上面的例子中,3转换成double类型,然后执行浮点数加法,所得结果的类型是double。

接下来就要完成初始化的任务了。在初始化过程中,因为被初始化的对象的类型无法改变,所以初始值被转换成该对象的类型。仍以这个例子说明,加法运算得到的double类型的结果转换成int类型的值,这个值被用来初始化ival。由double向int转换时忽略掉了小数部分,上面的表达式中,数值6被赋给了ival。

何时发生隐式类型转换

在下面这些情况下,编译器会自动地转换运算对象的类型:

在大多数表达式中,比int类型小的整型值首先提升为较大的整数类型。

在条件中,非布尔值转换成布尔类型。

初始化过程中,初始值转换成变量的类型;在赋值语句中,右侧运算对象转换成左侧运算对象的类型。

如果算术运算或关系运算的运算对象有多种类型,需要转换成同一种类型。

如第6章将要介绍的,函数调用时也会发生类型转换。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.10 逗号运算符 下一篇4.11.1 算术转换

评论

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