12

重複の可能性:
C++コンマ演算子

私は今日、予期しない(少なくとも私にとっては)C ++の動作に遭遇しました。これは、次のスニピットによって示されています。

#include <iostream>

int main()
{
  std::cout << ("1", "2") << std::endl;

  return 0;
}

出力:

2

これは、括弧の間にある任意の数の文字列で機能します。VisualStudio2010コンパイラとコードパッドでテスト済み。

そもそもなぜこれがコンパイルされるのか疑問に思いますが、この「機能」の用途は何ですか?

4

5 に答える 5

15

ああ、これはコンマ演算子です。カンマと2つ(またはそれ以上)の式を使用すると、すべての式が実行され、全体として最後の式の結果になります。そのため、この結果として「2」が表示されます。詳細については、こちらをご覧ください。

于 2012-08-10T09:42:20.293 に答える
8

これはコンマ演算子と呼ばれます。式x, yでは、コンパイラは最初にx(すべての副作用を含めて)評価し、次にy;を評価します。式の結果は。の結果ですy

あなたが引用する表現では、それはまったく役に立たない。最初の文字列は単に無視されます。ただし、最初の式に副作用がある場合は、それが役立つ可能性があります。(私の意見では、ほとんどの場合、難読化のためであり、避けるのが最善です。)

これは、コンマが演算子の場合にのみ機能することにも注意してください。それ以外の場合(関数の引数を区切る句読点など)は、そうです。それで:

f( 1, 2 );      //  Call f with two arguments, 1 and 2
f( (1, 2) );    //  Call f with one argument, 2

(参照してください。難読化に適していると言いました。)

于 2012-08-10T09:47:13.013 に答える
3

コンマ演算子(、) コンマ演算子(、)は、1つの式のみが必要な場合に含まれる2つ以上の式を区切るために使用されます。式のセットで値を評価する必要がある場合は、右端の式のみが考慮されます。

たとえば、次のコードです。

a = (b=3, b+2);

参照:http://www.cplusplus.com/doc/tutorial/operators/

于 2012-08-10T09:44:05.197 に答える
1

コンマ( "、")の結果は、正しい部分式です。私はそれをstlコンテナ上のループで使用します:

for( list<int>::iterator = mylist.begin(), it_end = mylist.end(); it != it_end; ++it )
  ...
于 2012-08-10T09:45:33.023 に答える
0

コンマ演算子は、コンマの両側の式を評価しますが、2番目の結果を返します。

于 2012-08-10T09:44:03.410 に答える