这个数组初始化是怎么发生的?

时间:2012-02-28 14:07:44

标签: c++

  

可能重复:
  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

有人能解释一下这里发生了什么吗?

2 个答案:

答案 0 :(得分:4)

你正在看那里的逗号运算符。基本上,表达式:

1,7

将评估1,但“返回”7。

你所拥有的那种特殊形式(以及我的上述形式)并不是那么有用,但你可以做以下事情:

x = a++, 1;

同时增加a并将x设置为1(实用性来自副作用)。

你以前会看到这个,但却没有意识到:

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

答案 1 :(得分:2)

同样的原因:

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

发生。

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