隐式类型转换发生场景
- 在混合类型的算术表达式中
在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换(Arithmetic Conversion)
int ival = 3;
double dval = 3.14159;
// ival被提升为double类型:3.0
ival + dval;
- 用一种类型的表达式赋值给另一种类型的对象
在这种情况下目标转换类型是被赋值对象的类型。例如在下面第一个赋值中文字常量0的类型是int。它被转换成int*型的指针表示空地址。在第二个赋值中double型的值被截取成int型的值。
// 0 被转换成int*类型的空指针值
int *pi = 0;
// dval 被截取为int 值3
ival = dval;
- 把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同
在这种情况下目标转换类型是形式参数的类型。
extern double sqrt( double );
// 2 被提升为double类型2.0
cout << "The square root of 2 is "<< sqrt( 2 ) << endl;
- 从一个函数返回一个表达式的类型与返回类型不相同
在这种情况下返回的表达式类型自动转换成函数类型。
double difference( int ival1,
int ival2 )
{
// 返回值被提升为double类型
return ival1 - ival2;
}