int a = 2, b = 3, c = 5, d = 4, e = 1;
if ((a = b > c ? d : e) == e) a++;
答えは a=2
これが実際に何をしているのかわかりません。
このコード ブロックが何をするのか、順を追って説明できますか?
int a = 2, b = 3, c = 5, d = 4, e = 1;
if ((a = b > c ? d : e) == e) a++;
答えは a=2
これが実際に何をしているのかわかりません。
このコード ブロックが何をするのか、順を追って説明できますか?
if ((a = b > c ? d : e) == e) a++;
に等しい:
if (b > c)
a = d;
else
a = e;
if (a == e)
a++;
こちらもご覧ください: C ++で行う?
理解するには、if 条件を構成する必要があります。
if ((a = b > c ? d : e) == e) a++;
最初に課題があります
a = b > c ? 日:え
それは言う: b > c なら a = d、そうでなければ a = e
この場合、3 > 5 は false なので、
a = eだからa = 1
それから別の評価があります
if(a==e) a++;
この場合、a = e = 1 なので、a++ -> a = 2 となります。
役に立てば幸いです;)
これがあなたが知りたいメインスポットだと思います
? b : c は条件演算子と呼ばれ、a が true の場合は b を使用し、そうでない場合は c を使用することを意味します。
(a = b> c? d : e)
ちょうど等しい
if(b>c)
a = d;
else
a = e;
最初に、このコードの実行後に変数を見ると、何も起こっていないように見えます。しかし、それは本当ですか?
LiHo はすでにこれを分解し、それをより読みやすいコードに「変換」する方法を示しており、彼のコードを使用すると、何が起こっているかを簡単に確認できるはずです。でも楽しみのために、それを分解して、与えられた数を考えてみましょう。
if ((a = b > c ? d : e) == e) a++;
これは次の形式です。
if(<something> == e) a++;
私たちはそれが何を意味するかを知っています。<something>
それでは、次の部分に注目しましょう。
(a = b > c ? d : e)
C++ 演算子の優先順位リストを見ると、三項演算子 ( ?:
) が より上位にランク付けされている=
ため、最初に評価されることがわかります。
b > c ? d : e
これは美化されたif
ステートメントです。「b
より大きい場合c
は を返しd
、そうでない場合e
は を返します。両方の値があり、b
それが より大きくないc
こともわかっています。したがって、このステートメントが を返すことがわかります。3
5
e
ここで、式を少し単純化しました。
(a = e)
これは課題です。a
に等しくなるように設定しますe
。ここで、さらにコンテキストを取得するために一歩戻ります。
if((a = e) == e) a++;
ここで何が起こるかというと、操作が実行された後、結果が返されます。(a = e)
その結果は、便利なことに、代入a
後の の値です。したがって、次のようになります。
if(a == e) a++;
a
に等しいe
(つまり に等しい1
)に設定したので、if
が実行され、からにa++
インクリメントされます。a
1
2
何も起こらなかったように見えますが、実際には多くの作業を行ってきました。