为什么 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++,我在一本书中读到数组声明 a[y,x];所以它应该是 [y], x;没有税]。为什么编译器会这样做?
最佳答案
逗号运算符 ,
也称为“忘记”运算符。它执行以下操作:
- 完全计算左操作数
- 忘记它的值(value)
- 完全评估正确的操作数
- 使用右操作数的值作为整个运算符表达式的值。
所以在你的情况下,它的行为就像它应该的那样。 a[x, y]
首先计算x
,然后丢弃它的值,然后使用y
的值作为整个表达式的值(括号中的那个)。
编辑
关于您在维基百科上的编辑。请注意,,
的优先级低于 =
的优先级。换句话说,
i = a, b, c;
被解释为
(i = a), b, c;
这就是为什么 a
被复制到 i
中的原因。然而,整个表达式的结果仍然是c
。
关于c++ - 运算符如何在数组声明中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379734/