2016-02-28 219 views

回答

7

你的代碼轉換爲:

((std::cout << (abs(b - c) < a)) && a < b + c) ? 1 : 0; 

首先,operator<<具有較高的operator precedenceoperator&&

只會打印abs(b - c) < a的值,而(a < b + c ? 1 : 0)部分將與返回值std::ostream::operator bool一起進行AND運算。

但警告是關於10沒有被分配到任何東西,也不具有任何副作用,因爲&&之前的三元條件(?:


正確的代碼是:

std::cout << (abs(b - c) < a && a < b + c ? 1 : 0); 
// same as std::cout << ((abs(b - c) < a && a < b + c) ? 1 : 0); 

std::cout << (abs(b - c) < a && (a < b + c ? 1 : 0)); 

事實上,他們是相當的(除了一個叫operator<<bool和其他與int)不需要三元操作員:

std::cout << (abs(b - c) < a && a < b + c); 
+1

我的意思是'std :: cout <<((abs(b-c) Wobbly

相關問題