c++ - 运算符如何在数组声明中运行?

标签 c++

为什么 int a[x,y] 转换为 a[y],因为逗号运算符是从左到右运算的?我期望 a[(x,y)],因为内部操作将首先完成。但在第一个中,它应该采用第一个参数。

我不打算使用逗号运算符进行数组初始化,只是想问问为什么会这样。

在书上看过,一头雾水。

更新:

Wikipedia says :

 i = a, b, c;            // stores a into i 
 i = (a, b, c);          // stores c into i   

所以正如第一行代码在数组中所说的那样,第一个值必须分配给数组。注意:我实际上并不打算使用它。我只是问问。我正在学习 C++,我在一本书中读到数组声明 a[y,x];所以它应该是 [y], x;没有税]。为什么编译器会这样做?

最佳答案

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

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

所以在你的情况下,它的行为就像它应该的那样。 a[x, y] 首先计算x,然后丢弃它的值,然后使用y 的值作为整个表达式的值(括号中的那个)。

编辑

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

i = a, b, c;

被解释为

(i = a), b, c;

这就是为什么 a 被复制到 i 中的原因。然而,整个表达式的结果仍然是c

关于c++ - 运算符如何在数组声明中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379734/

相关文章:

c++ - 自己的 AddRef 和 Release for Boost shared_ptr

c++ - CUDA:如何在设备上填充动态大小的 vector 并将其内容返回给另一个设备功能?

c++ - 什么时候出现 "overloaded definition needed"错误?

c++ - 在 C++ 的编译期间成员函数是否可用?

c++ - 对象和基元通过引用传递之间的区别

c++ - 插入MYSQL数据库表后出现错误消息

c++ - 从 Linux-Windows 交叉编译,stdio 具有 undefined reference (对 __imp___acrt_iob_func)

c++ - 如何检查 x-y 轴上的碰撞

c++ - 指针声明 vector

c++ - 如何在 LabVIEW 的 DLL 中打开 OpenCV 结构化边缘检测器的模型文件?