bool bSwitch = true;
double dSum = 1 + bSwitch?1:2;
因此, 「DSUM」 是:你對這個C++表達式有什麼期望?
A)= 1個
B)= 2
C)= 3
結果是公正荒謬和我撞壞一...
我使用VS2008 - > 「微軟(R)32位C/C++ - Optimierungscompiler版本15.00.21022.08獻給80x86的」
bool bSwitch = true;
double dSum = 1 + bSwitch?1:2;
因此, 「DSUM」 是:你對這個C++表達式有什麼期望?
A)= 1個
B)= 2
C)= 3
結果是公正荒謬和我撞壞一...
我使用VS2008 - > 「微軟(R)32位C/C++ - Optimierungscompiler版本15.00.21022.08獻給80x86的」
Spasibo Kiril! Ja ponjal 4to oblagalsja ;-) – maxw
這是一個優先的事情是吧。
bool bSwitch = true;
double dSum = (1 + bSwitch)?1:2;
dSum
爲1.0
本來就容易與各地運營商明智的間距被發現。
我期望1.
,因爲+
運算符優先於三元運算符。所以表達式被讀取爲
double dSum = (1 + bSwitch) ? 1:2;
和1 + bSwitch
是非零的,因此它的計算結果爲true
。
警告,很明顯,但我用的是真正的編譯器:
void foo() {
bool bSwitch = true;
double dSum = 1 + bSwitch?1:2;
}
給出:
$ clang++ -fsyntax-only test.cpp
test.cpp:3:28: warning: operator '?:' has lower precedence than '+'; '+' will be evaluated first [-Wparentheses]
double dSum = 1 + bSwitch?1:2;
~~~~~~~~~~~^
test.cpp:3:28: note: place parentheses around the '+' expression to silence this warning
double dSum = 1 + bSwitch?1:2;
^
( )
test.cpp:3:28: note: place parentheses around the '?:' expression to evaluate it first
double dSum = 1 + bSwitch?1:2;
^
( )
1 warning generated.
是的,我給了EN整個命令行,它在默認情況下是在。
爲了記錄,每個C++編譯器都會這樣做。經驗法則:加法和減法之前的乘法和除法;其他一切都會得到parens。 –
注意自己:在處理三元運算符時儘可能多地使用括號。 –