24
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

なぜこの動作ですか?説明していただけますか?

4

2 に答える 2

66

http://en.wikipedia.org/wiki/Comma_o​​perator :

C および C++ プログラミング言語では、コンマ演算子 ( token で表される,) は、最初のオペランドを評価して結果を破棄し、次に 2 番目のオペランドを評価してこの値 (および型) を返す二項演算子です。

あなたの最初のif

if (a, b)

aは最初に評価されて破棄され、b2 番目に評価されて 0 として返されます。したがって、この条件は false です。

あなたの2番目にif

if (b, a)

bは最初に評価されて破棄され、a2 番目に評価されて 1 として返されます。したがって、この条件は真です。

2 つ以上のオペランドがある場合、最後の式が返されます。

両方の条件を真にしたい場合は、&& 演算子を使用する必要があります。

if (a && b)
于 2013-05-10T04:08:07.800 に答える