这里发生了什么转换?

时间:2012-03-23 13:02:42

标签: c++ type-conversion implicit-conversion

在评估以下表达式时会发生哪些转换?

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,然后会被添加。{/ p>

c)首先,ival转换为double。然后dval + ival进行评估,其类型为double。然后cval ...我不知道它是否直接转换为double,或者它是否先被提升为int。无论如何,在该步骤之后,临时值dval + ival被添加到double

我的理解是否正确?

2 个答案:

答案 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


bc的情况下," 通常的算术转换"申请,意思是:

b)ival转换为float和(使用特殊规则,而不是" 通常的算术转换"){{1转换为fval + ival

c)double转换为ivaldouble转换为cval

相关问题