C++ | 内置类型对象的标准转换

本文详细介绍了C++中常见的四种隐式类型转换场景:混合类型算术表达式中的算术转换、不同类型的变量间赋值、函数参数类型不匹配时的自动转换,以及函数返回类型与实际返回值类型不一致时的转换。文章强调了算术转换遵循的原则,即为防止精度损失,类型会被提升为更宽的类型,并且所有小于整型的有序类型在计算前会被转换为整型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上。

隐式类型转换发生在下列这些典型情况下。

1.在混合类型的算术表达式中;
在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换( Arithmetic Conversion),例如: 

int ival = 3;
double dval= 3. 14159;

ival + dval;  // ival 被提升为double类型: 3.0

2.用一种类型的表达式赋值给另一种类型的对象;

在这种情况下目标转换类型是被赋值对象的类型。例如在下面第一个赋值中文字常量0的类型是int。它被转换成 int* 型的指针表示空地址。在第二个赋值中double型的值被截取成int型的值。

int *pi = 0; // 0被转换成 int* 类型的空指针值

ival = dval; // dval被截取为int值3

3.把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同;

在这种情况下目标转换类型是形式参数的类型。例如:

extern double sqrt( double );

cout << "The square root of 2 is "<< sqrt( 2 ) << endl;  // 2被提升为double类型 2.0

4. 从一个函数返回一个表达式的类型与返回类型不相同。

在这种情况下返回的表达式类型自动转换成函数类型。例如:

double difference( int ival1,int ival2 )
{
    return ival1-ival2; //返回值被提升为double类型
}

算术转换保证了二元操作符,如加法或乘法的两个操作数被提升为共同的类型,然后再用它表示结果的类型。两个通用的指导原则如下:

(1)为防止精度损失,如果必要的话,类型总是被提升为较宽的类型。

(2)所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值