在评估以下表达式时会发生哪些转换?
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
被提升为double
而ival
被转换为double
,然后会被添加。{/ p>
c)首先,ival
转换为double
。然后dval + ival
进行评估,其类型为double
。然后cval
...我不知道它是否直接转换为double
,或者它是否先被提升为int
。无论如何,在该步骤之后,临时值dval + ival被添加到double
。
我的理解是否正确?
答案 0 :(得分:2)
记住魔鬼在细节中有这样的问题,总是可能你错过了什么。
A)实际上我在stackoverflow(Is if(double) valid C++?)上找到了答案:if中的所有内容都直接转换为boolean。
B)首先将iVal转换为float,然后添加到fVal,然后转换为double。在赋值之前,表达式被完全评估/输入。
C)从左到右的顺序将应用于+运算符。所以iVal被转换为double,然后加到dVal然后同样的情况发生在cVal,所以直接加倍。
答案 1 :(得分:2)
a)fval
从上下文转换为bool
。
在b
和c
的情况下," 通常的算术转换"申请,意思是:
b)ival
转换为float
和(使用特殊规则,而不是" 通常的算术转换"){{1转换为fval + ival
。
c)double
转换为ival
,double
转换为cval
。