2016-09-25 210 views
0

我剛剛開始使用C++,所以不確定評估的順序。 在下面的代碼段,你可以看到在評估C時改變評估的順序給了我不同的結果當我評估C *(line-i)/ i時,它給了我-131213633,當我評估它爲(line-我)/我* C,它給了我145422675.我明白在第一種情況下,這是一個溢出問題,但我想了解評估順序。C++中的評估順序

C = C * (line - i)/i ; 
(gdb) p line 
$1 = 31 
(gdb) p i 
$2 = 15 
(gdb) p C 
$3 = 145422675 
(gdb) p C * (line - i)/i 
$4 = -131213633 
(gdb) p (line - i)/i * C 
$5 = 145422675 
+0

http://en.cppreference.com/w/cpp/language/eval_order標記爲脫離主題 – Danh

+0

您不確定評估的順序是什麼,或者您不確定它爲什麼重要? –

+0

@VaughnCato他表示,他知道有溢出。 – Danh

回答

0

兩個*/聯想到左邊,所以表達式求值從左向右。 (即C * 16)溢出。
(line - i)/i11 * C不溢出。

0
cout<< 3/2 *2; // Prints 2 
cout<< 2*3/2; // Prints 3 

在第一行中,3/2的計算結果爲1.5,這是整數1,然後乘以2給出2.

在第二行中,乘法首先進行,2 * 3評估爲6,除以2得出3.

所以當混合整數和雙算術時,評估的順序很重要。