为什么int a[x,y]
会转换为a[y]
,因为逗号运算符从左到右运算?我期待a[(x,y)]
,因为内部操作将首先完成。但是在第一个中它应该采用第一个参数。
我不打算使用逗号运算符进行数组初始化,只是问为什么会发生这种情况。
我在一本书中看到它,我很困惑。
更新
i = a, b, c; // stores a into i
i = (a, b, c); // stores c into i
因此,第一行代码在数组中表示必须将第一个值分配给数组。注意:我实际上并不打算使用它。我只是问问。我正在学习C ++,我在一本书中读到了一个数组声明中的[y,x];所以它应该是[y],x;没有税]。为什么编译器会这样做?
答案 0 :(得分:9)
逗号运算符,
也称为“遗忘”运算符。它执行以下操作:
所以在你的情况下,它的行为就像它应该的那样。 a[x, y]
首先评估x
,然后丢弃其值,然后使用y
的值作为整个表达式的值(括号中的值)。
修改强>
关于使用维基百科进行编辑。请注意,,
的优先级低于=
的优先级。换句话说,
i = a, b, c;
被解释为
(i = a), b, c;
这就是a
被复制到i
的原因。但是,整个表达式的结果仍为c
。
答案 1 :(得分:0)
我相信您的编译器假设您要添加括号。在C ++中有一个逗号运算符和一个逗号分隔符。逗号运算符必须将其自身及其操作数括在括号中。 int数组构造函数只需要一个值,所以我猜你的编译器正试图帮助你。
http://msdn.microsoft.com/en-us/library/zs06xbxh(v=vs.80).aspx
编辑:int a [x,y]无效; int [(x,y)]有效;他的编译器假设他打算添加括号。在更一般的上下文中,逗号运算符不需要括号。在函数调用和初始化程序中,需要使用括号来区分使用逗号运算符和逗号分隔符。