-5

これは:

if(x == a || b){//do something}

と同じ:

if(x == a || x == b){//do something}

?

最初のケースでは、x が a に等しいかどうか、および b が真か偽かを評価するため、そうではないと思います。

2 番目のケースでは、x が a に等しいかどうか、および x が b に等しいかどうかを評価します。そして、遅延評価では、x が a に等しい場合、それ以上評価しないことを理解しています。

しかし、最初のケースで x が a または b に等しいかどうかを尋ねると誰かが考えているので、確認したいと思います。

4

6 に答える 6

3

いいえ

C++ では、次のようになります。

x == a || b  // Same as (x == a) || b

これと同等です:

(x == a) || (bool)b

とが等しい場合trueに評価されるか、 またはに変換されたときに が に評価される場合。一方、C では、これは次のようになります。xabtruebool

(x == a) || (b != 0)

どちらがtrueifxaare equal OR ifbが 0 と異なると評価されます (ここでbは、整数型であるという暗黙の仮定を行う必要があります。そうしないと、これはコンパイルされません)。

一方、これは:

(x == a || x == b) // Same as ((x == a) || (x == b))

C++ と C の両方で、とが等しい場合、 またはtruexが等しい場合 (つまり、 が と等しいか等しい場合) に評価されます。axbxab

于 2013-02-24T14:36:44.733 に答える
2

2 つの式は同等ではありません。これ

if(x == a || b)

と同等です

if( (x == a) || (b))

つまり、x==aとの OR ですb。C++ では、がまたはb以外に評価された場合、 と見なされます。0falsetrue

x==b2 番目のものは、単にテストする代わりに、かどうかをテストしますb

于 2013-02-24T14:35:37.853 に答える
1

いいえ。C では、これは次と同等です。

if(x == a || b != 0)
于 2013-02-24T14:35:46.793 に答える
0

いいえ。

if (x == a || b)

に等しい

if ((x == a) || (bool)b)

演算子は演算子よりも優先順位==が高いためです。演算子の優先順位の表を参照してください。||

于 2013-02-24T14:43:27.230 に答える
0

最初の例は、「x が a と等しい場合、または b が真である場合」と読みます。

2 番目は、「x が a と等しい場合、または x が b と等しい場合」と読みます。

于 2013-02-24T14:36:17.853 に答える
0

あなたはほぼ正しいです。最初のケースは、x が a OR b に等しいことを意味します true

遅延評価とは、結果が明らかになるまで式が評価されることを意味します。たとえば(x || y)、OR 式では、結果は次の場合にわかります。その場合x==true、式全体も真でなければなりません。AND の場合、 のよう(x && y)に、 のときに結果が明らかになりx==falseます。その通りです。もし ならx==a、私たちはすでに答えを知っているので、それ以上の作業は必要ありません。

于 2013-02-24T14:45:59.740 に答える