2

C++ では、ある値 x が 2 つの制限の間にあるかどうかを判断する通常の方法は次のとおりです。

  //This is (A)
double x = 0.0d;
double lower = -1.0d;
double upper = +1.0d;

if(x > lower && x < upper){
  // Do some stuff
}

しかし、今日、私はこれができることを偶然発見しました:

  // This is (B)
double x = 0.0d;
double lower = -1.0d;
double upper = +1.0d;

if(lower < x < upper){
  // Do some stuff
}

うまく機能しているようですが、「lower < x < upper」でこれが行われたことは聞いたことがありません。これにより、期待どおりに実行可能なコードが生成されますか? IE、(A) は (B) と同等ですか?

多くの人はこれについて知らないと思いますが、それはおそらくコンパイラが (A) を (B) とは異なる方法で解釈するためだと思います。これでしょ?

4

4 に答える 4

13

いいえ、A と B は同等ではありません。これはできません。

または、明らかに(あなた発見したように)できますが、自分がしていると思っていることをしていません。

を評価しています。(lower < x) < upperつまり、 の値lower < x(falseまたはtrueですが、比較のために に変換されますint) が と比較されupperます。

詳細については、この演算子の優先順位の表を参照してください。

于 2012-12-17T17:25:07.070 に答える
3

それらは間違いなく同等ではありません。式lower < x < upperは最初lower < xに true または false に評価され、次にそれぞれtrue < xorになりfalse < xます。

于 2012-12-17T17:25:45.697 に答える
1

うまくいきません。実際、それは完全に間違っており、偶然にしか機能しません。

lower < x < upperとして解析され(lower < x) < upperます。(lower < x)のタイプboolは であり、その値はの値に応じてtrueまたは のいずれかになります。その値をコンパイラと比較するために、 bool をforおよびforの値を持つ float に変換します。falsexboolupper1.0true0.0false

于 2012-12-17T17:27:20.587 に答える
-3

はい、そうです。どちらの場合もx値の範囲内です。例: 下限 = 4; アッパー= 9; x = 7;

If you do:7 > 4 && 7 < 9は と言うのと同じ4 < 7 < 9です。ちなみに算数の基本です。

于 2012-12-17T17:27:10.287 に答える