2012-02-28 28 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

有人可以解釋這裏發生了什麼嗎?

+0

重新應該包括某種方式解釋這個問題是從複製不同的一票。如果你想不到,就不要重新開放。 – 2012-02-28 14:37:21

回答

4

您正在查看逗號運算符。基本上,表達式:

1,7 

將評估1但「迴歸」 7

,你有(以及礦山以上)特定形式是沒有多大用處的,但你可以做這樣的事情:

x = a++, 1; 

以增加a和設置x爲1(有用性來自副作用)。

,你將有見過這個,而不一定意識到這一點:

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

非常感謝:) – manyu 2012-02-28 14:24:43

2

同樣的原因:

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

發生。

這就是逗號運算符的工作原理。它「返回」最後一個表達式,同時(可能)評估兩者。