评估以下表达式时发生了哪些转换?这里发生了哪些转换?
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;
我的想法:
一)我想if
需要bool
值,因此float
被隐式现浇到bool
。
b)我假设fval
被提升为double
而ival
被转换为double
,然后他们被添加。
c)首先,将ival
转换为double
。然后dval + ival
得到评估,这是double
类型。然后cval
......我不知道它是否直接转换为double
,或者是否先将它升级为int
。无论如何,在该步骤之后,临时值dval + ival被添加到该double
。
我的理解是否正确?
这三者都有未定义的行为,因为它们涉及从未初始化的值读取数据。 – Mankarse 2012-03-23 13:07:31
我找不到任何错误,但我无法背诵这些标准。不过,我会说你比大多数C++程序员更了解细节。 – Sjoerd 2012-03-23 13:08:03
@Mankarse结果未定义,而不是发生哪些转换。 – 2012-03-23 13:09:26