这里正在发生哪些转换

What conversions are taking place here?

本文关键字:转换 这里      更新时间:2023-10-16

计算以下表达式时会发生哪些转换?

char cval;
int ival;
float fval; 
// Assume all 3 have been set to correct values...
a) if(fval)
b) double dval = fval + ival; 
c) dval + ival + cval;

我的想法:

a( 我假设if需要一个bool值,因此float被隐式转换为bool

b( 我假设fval被提升为doubleival被转换为double,然后将它们添加。

c( 首先,ival转换为double。 然后dval + ival被评估,这是 double 型。 然后cval...我不知道它是直接转换为double,还是先提升为int。无论如何,在该步骤之后,临时值 dval + ival 将添加到该double .

我的理解正确吗?

a( fval在上下文中转换为bool


bc的情况下,">通常的算术转换"适用,这意味着:

b( ival转换为float并(使用特殊规则,而不是">通常的算术转换"(fval + ival转换为double

c( ival转换为doublecval转换为double

请记住,像这样的问题在细节中,你总是有可能错过一些东西。

A(实际上我在stackoverflow上找到了答案(if(double(有效C++吗?(:if中的所有内容都直接转换为布尔值。

B(首先将iVal转换为浮点数,然后添加到fVal,然后转换为双精度。表达式在赋值之前完全计算/键入。

C( 从左到右的顺序将应用于 + 运算符。所以 iVal 被转换为双倍,然后添加到 dVal,然后 cVal 也会发生同样的情况,所以直接转换为双倍。