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 Studio 2010 で次のような出力を得ました。
fail
success
なぜこの動作ですか?説明していただけますか?
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 Studio 2010 で次のような出力を得ました。
fail
success
なぜこの動作ですか?説明していただけますか?
http://en.wikipedia.org/wiki/Comma_operator :
C および C++ プログラミング言語では、コンマ演算子 ( token で表される
,
) は、最初のオペランドを評価して結果を破棄し、次に 2 番目のオペランドを評価してこの値 (および型) を返す二項演算子です。
あなたの最初のif
:
if (a, b)
a
は最初に評価されて破棄され、b
2 番目に評価されて 0 として返されます。したがって、この条件は false です。
あなたの2番目にif
:
if (b, a)
b
は最初に評価されて破棄され、a
2 番目に評価されて 1 として返されます。したがって、この条件は真です。
2 つ以上のオペランドがある場合、最後の式が返されます。
両方の条件を真にしたい場合は、&& 演算子を使用する必要があります。
if (a && b)