int a = 1, b = 0;
if(a, b)
printf("success\n");
else
printf("fail\n");
if(b, a)
printf("success\n");
else
printf("fail");
これはcppファイルであり、Visual Studio2010で次のように出力を取得しました。
fail
success
なぜこの振る舞い?説明してもらえますか?
http://en.wikipedia.org/wiki/Comma_operator :
CおよびC++プログラミング言語では、コンマ演算子(トークン
,
で表される)は、最初のオペランドを評価して結果を破棄し、次に2番目のオペランドを評価してこの値(およびタイプ)を返す2項演算子です。 。
最初のif
:
if (a, b)
a
が最初に評価されて破棄され、b
が2番目に評価されて0として返されます。したがって、この条件はfalseです。
2番目のif
:
if (b, a)
b
が最初に評価されて破棄され、a
が2番目に評価されて1として返されます。したがって、この条件は真です。
オペランドが3つ以上ある場合は、最後の式が返されます。
両方の条件を真にしたい場合は、 &&演算子 を使用する必要があります。
if (a && b)
ウィキペディアが提供する別のユースケースを示す例を次に示します。
条件(if、while、do while、またはfor)内でコンマを使用すると、補助計算、特に関数の呼び出しと結果の使用、およびブロックスコープを使用できます。
if(y = f(x)、y> x){... // xとyを含むステートメント}
多くのCプログラマーは、forステートメントの初期化子部分でコンマに遭遇しましたが、ifステートメントで使用されているのを見た人はそれほど多くありません。上記の場合、ifステートメントが条件y> xをテストする前にyを初期化できます。