2012-08-30 28 views
4
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的」

+2

爲了記錄,每個C++編譯器都會這樣做。經驗法則:加法和減法之前的乘法和除法;其他一切都會得到parens。 –

+1

注意自己:在處理三元運算符時儘可能多地使用括號。 –

回答

7

operator+具有比三元運算符?:更高的precedence

所以,這相當於

double dSum = (1 + bSwitch) ? 1 : 2; 

因此,你必須dSum == 1

+1

Spasibo Kiril! Ja ponjal 4to oblagalsja ;-) – maxw

3

這是一個優先的事情是吧。

bool bSwitch = true; 
double dSum = (1 + bSwitch)?1:2; 

dSum爲1.0

本來就容易與各地運營商明智的間距被發現。

3

我期望1.,因爲+運算符優先於三元運算符。所以表達式被讀取爲

double dSum = (1 + bSwitch) ? 1:2; 

1 + bSwitch是非零的,因此它的計算結果爲true

請參閱operator precedence

1

警告,很明顯,但我用的是真正的編譯器:

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整個命令行,它在默認情況下是在

相關問題