3

为什么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]; 中写的书。所以应该是 a[y], x; 没有税]。为什么编译器会这样做?

4

2 回答 2

9

逗号运算符,也称为“忘记”运算符。它执行以下操作:

  1. 完全计算左操作数
  2. 忘记它的价值
  3. 完全评估正确的操作数
  4. 使用右操作数的值作为整个运算符表达式的值。

因此,在您的情况下,它的行为应如此。a[x, y]首先计算x,然后丢弃它的值,然后使用 的值y作为整个表达式的值(括号中的那个)。

编辑

关于您对维基百科的编辑。请注意, 的优先级,低于 的=。换句话说,

i = a, b, c;

被解释为

(i = a), b, c;

这就是为什么a被复制到i. 但是,整个表达式的结果仍然是c.

于 2013-01-17T13:06:51.587 回答
0

我相信您的编译器假设您打算添加括号。在 C++ 中有一个逗号运算符和一个逗号分隔符。逗号运算符本身及其操作数必须用括号括起来。int 数组构造函数只需要一个值,所以我猜你的编译器正试图帮助你。

http://msdn.microsoft.com/en-us/library/zs06xbxh(v=vs.80).aspx

编辑: int a[x,y] 无效;int a[(x,y)] 有效;他的编译器假设他打算添加括号。在更一般的上下文中,逗号运算符不需要括号。在函数调用和初始化程序中,需要括号来区分使用逗号运算符和逗号分隔符。

于 2013-01-17T13:13:50.527 回答