我初始化數組
int main()
{
int arr[3]= { (1,3), 2, 4 };
cout << arr[0] << " " << arr[1] << " " << arr[2] << endl;
}
我認爲它會給出一個編譯時錯誤,但它運行良好。該數組使用值3,2,4
進行初始化,輸出也是3 2 4
。
有人可以解釋這裏發生了什麼嗎?
我初始化數組
int main()
{
int arr[3]= { (1,3), 2, 4 };
cout << arr[0] << " " << arr[1] << " " << arr[2] << endl;
}
我認爲它會給出一個編譯時錯誤,但它運行良好。該數組使用值3,2,4
進行初始化,輸出也是3 2 4
。
有人可以解釋這裏發生了什麼嗎?
您正在查看逗號運算符。基本上,表達式:
1,7
將評估1
但「迴歸」 7
,你有(以及礦山以上)特定形式是沒有多大用處的,但你可以做這樣的事情:
x = a++, 1;
以增加a
和設置x
爲1(有用性來自副作用)。
,你將有見過這個,而不一定意識到這一點:
for (i = 0, j = 0; i < 4; i++, j++) ...
非常感謝:) – manyu 2012-02-28 14:24:43
同樣的原因:
int x = (1,3);
assert(x==3);
發生。
這就是逗號運算符的工作原理。它「返回」最後一個表達式,同時(可能)評估兩者。
重新應該包括某種方式解釋這個問題是從複製不同的一票。如果你想不到,就不要重新開放。 – 2012-02-28 14:37:21