2016-01-14 35 views
2

爲什麼我在第三行上得到不同的結果? 輸出結果爲:以相反順序打印表達式時獲得不同結果

1 
1 
0 
1 

我不應該收到行號。 3也輸出1而不是0?它與其他行具有相同的語法。

#include <iostream> 
using namespace std; 

int main() 
{ 
    int x = -3; 
    bool a = (x % 2 == 1) || (x < 0); 
    bool b = (x < 0) || (x % 2 == 1); 
    cout << a << "\n";        // line 1 
    cout << b << "\n";        // line 2 
    cout << (x % 2 == 1) || (x < 0); cout << "\n"; // line 3 
    cout << (x < 0) || (x % 2 == 1); cout << "\n"; // line 4 
}  

回答

10

因爲operator precedence,這operator<<具有高於operator||,只有

(x % 2 == 1) 

部分被打印。其餘的就像做cout || (x < 0);。 (注意std::cout,像任何其他std::basic_ios導出流隱式轉換爲bool

帶括號的,它看起來像這樣:

(cout << (x % 2 == 1)) || (x < 0); 

印刷1 4號線,因爲(x < 0)是真實的,你切換操作數 - 現在應該清楚了。

解決方案:圓括號的operator||電話:圍繞operator||的操作數,而另一方面,多餘的

cout << (x % 2 == 1 || x < 0); 

括號。