2012-04-24 28 views
-7

我們必須表達式
if ((option & SERVER_OPTIONS::VALUE) == SERVER_OPTIONS::VALUE) ...
填寫的區別C++ ==

if (option & SERVER_OPTIONS::VALUE == SERVER_OPTIONS::VALUE)... 

爲什麼爲option相同的價值觀有不同的結果?

+2

有一些問題只是令人困惑。爲什麼對於1,2和3的相同值「1 + 2 * 3」與「(1 + 2)* 3」有不同的結果? – Jon 2012-04-24 13:40:07

+0

-1這個問題。你可以在http://msdn.microsoft.com/en-us/library/fatf1t6a%28v=VS.100%29.aspx?lc=1033 – 2012-04-24 13:43:01

+0

@RaphaelB找到你要找的東西。等等,是不是JScript的列表(儘管它也可能主要適用於C++)?用於C++的是這裏:http://msdn.microsoft.com/en-us/library/126fe14k(v=vs.100).aspx – Botz3000 2012-04-24 13:49:37

回答

13

C++ operator precedence指出==!=&之前評估。所以,你的第二個語句被評價爲,如果它是這樣的:

if (option & (SERVER_OPTIONS::VALUE == SERVER_OPTIONS::VALUE)) 
2

在這份聲明中

if ((option & SERVER_OPTIONS::VALUE) == SERVER_OPTIONS::VALUE)

option & SERVER_OPTIONS::VALUE部分首先評估爲()優先級較高。 而在後一種情況下,首先評估SERVER_OPTIONS::VALUE == SERVER_OPTIONS::VALUE。執行順序決定了表達式的結果。