評估以下表達式時發生了哪些轉換?這裏發生了哪些轉換?
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