直到今天,我還以爲我明白C++運算符和precedence。我給你以下簡單的代碼:帶布爾值的C++後綴運算符優先級和
int i = 0, j = 0
i++;
j++;
cout << i << ' ' << j << endl;
當然,我們期待i
和j
的輸出值分別爲1和1。現在如果我們嘗試將增量放入一行,會發生什麼?
int i = 0, j = 0
i++ && j++;
cout << i << ' ' << j << endl;
我在這裏的推理是布爾運算符對輸出沒有影響。但是我們的產出令人驚訝的是i = 1
和j = 0
?那麼這裏發生了什麼?
更加奇怪的是,通過從後綴增量切換到前綴增量或使用另一個布爾運算符,結果如預期。 I.e:
//Expected i=1, j=1
++i && ++j;
//Expected i=1, j=1
i++ || j++;
P.S.我知道,正確的使用情況來更新這兩個變量在一行是這樣的:
i++, j++;
但是好奇心得到了最好的我,現在我不知道爲什麼使用布爾AND
運營商擁有令人吃驚的結果。
第二個代碼段的輸出不是你聲稱它是:https://ideone.com/61YZL6 –
我認爲他期待&&表達式的左側評估爲0,因爲它應該,因此不需要檢查右側 –
「right用例更新這兩個變量「是'i ++; J ++;'。你把它們放在一個單一的行中就沒有任何好處。 –