2013-04-07 103 views
0

我有3個值的枚舉:C++枚舉和OR條件

enum InputState { Pressed, Released, Held }; 

而且我用它在這個代碼:

//GetState returns an InputState 
if(myInput.GetState(keyCode) == InputState::Pressed) 
{ 
    //This means "keyCode" has the state "Pressed" 
} 

爲什麼不這項工作?

if(myInput.GetState(keyCode) == (InputState::Pressed || InputState::Held)) 
{ 
    //This is always false 
} 
if((myInput.GetState(keyCode) == InputState::Pressed) || (myInput.GetState(keyCode) == InputState::Held)) 
{ 
    //This works as intended, triggers when "keyCode" is either Pressed OR Held 
} 

作爲一個測試,我做:

//Using the same values from the enum, but as int now 
if(1 == (1 || 2)) 
{ 
    //This works as intended 
} 

我缺少的東西?

回答

1

||是一個二元操作,需要兩個布爾值。在你的例子中,布爾值是測試與==相等的結果。

要知道爲什麼你的簡單示例工作,讓我們計算表達式

1 == (1 || 2) 

首先,我們必須在括號內啓動,所以我們將首先評估(1 || 2)。在C++中,任何非零值在布爾表達式中使用時相當於true,所以(1 || 2)相當於(true || true),其值爲true。所以,現在我們的表現是

1 == true 

再次,1相當於在此背景下true,所以這種比較是一樣的true == true,這當然計算結果爲true

1

是的,你錯過了一些東西。這個工作總事故:

(1 == (1 || 2)) 

它沒有設置比較。它只是將(1 || 2)計算爲true,然後將其轉換爲其整數值(1),即true

同樣的事情會發生與

(1 == (1 || 4)) 
(1 == (0 || 1)) 
(1 == (0 || 4)) 

,他們都屬實。

(2 == (1 || 2)) 

是假的。