我初始化数组
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