0

私は3つの値を持つ列挙型を持っています:

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
}

何か不足していますか?

4

2 に答える 2

1

はい、何かが欠けています。これは完全に偶然に機能しました:

(1 == (1 || 2))

設定比較ではありません。として単純に計算(1 || 2)し、その整数値 ( )trueに変換します。true1

同じことが起こったでしょう

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

そしてそれらはすべて真実です。

しかし

(2 == (1 || 2))

は偽です。

于 2013-04-07T21:16:28.543 に答える
1

|| 2 つのブール値を期待するバイナリ演算です。あなたの例では、ブール値は == と等しいかどうかをテストした結果です。

簡単な例が機能する理由を確認するために、式を評価してみましょう

1 == (1 || 2)

最初に括弧内から開始する必要があるため、最初に を評価し(1 || 2)ます。C++ では、ゼロ以外の値はtrueブール式で使用される場合と同等であるため、(1 || 2)(true || true)に評価される場合と同等trueです。だから今、私たちの表現は

1 == true

繰り返しますが、このコンテキストで1は と同等trueであるため、この比較は と同じtrue == trueであり、もちろん に評価されtrueます。

于 2013-04-07T21:17:03.333 に答える