2012-02-28 53 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); 

发生。

这就是逗号运算符的工作原理。它“返回”最后一个表达式,同时(可能)评估两者。