2012-02-28 14 views
2

可能性の重複:
C++ Comma Operatorこの配列の初期化はどのように行われますか?

私はそれがコンパイル時にエラーを与えるだろうと思ったが、それは罰金を実行している

int main() 
{ 
    int arr[3]= { (1,3), 2, 4 }; 
    cout << arr[0] << " " << arr[1] << " " << arr[2] << endl; 
} 

で配列を初期化しています。配列は値3,2,4で初期化され、出力も3 2 4です。

ここで何が起こっているのか説明できますか?

int x = (1,3); 
assert(x==3); 

が起こる:なぜ

+0

再度開くための投票は、この質問が重複して異なるいくつかの方法の説明を含める必要があります。あなたが考えることができない場合は、再開しないでください。 –

答えて

4

あなたはコンマオペレータを見ています。基本的には、表現:

1,7 

1を評価しますが、特定のあなたが持っているフォーム(だけでなく、上記の鉱山が)その有用ではありませんが、あなたはのようなものを行うことができます7.

を「返す」:

x = a++, 1; 

と増分axを1に設定します(有効性は副作用に起因します)。

あなたは、必ずしもそれを実現することなく前にこれを見ているだろう:

for (i = 0, j = 0; i < 4; i++, j++) ... 
+0

ありがとうたくさん:) – manyu

2

同じ理由。

コンマ演算子の仕組みです。 "を返します"最後の式は(潜在的に)両方を評価します。

関連する問題