【发布时间】:2012-03-23 13:02:42
【问题描述】:
计算以下表达式时会发生哪些转换?
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,然后它们被添加。
c) 首先,ival 被转换为double。然后dval + ival 被评估,其类型为double。然后cval...不知道是直接转成double,还是先升级成int。无论如何,在这一步之后,临时值 dval + ival 被添加到 double。
我的理解正确吗?
【问题讨论】:
-
这三个都有未定义的行为,因为它们涉及读取未初始化的值。
-
我没有发现任何错误,但我无法在这些点上背诵标准。不过,我想说你比大多数 C++ 程序员更了解细节。
-
@Mankarse 结果未定义,不是发生了哪些转换。
-
@Mankarse 是的。但是不要看,假设它们已经正确初始化,它只是关于发生的转换
标签: c++ type-conversion implicit-conversion