c++ - 为什么 C++ 编译器在这个简单的程序中不给予优先权(赋值下的递增运算符)?

标签 c++ compiler-construction operators operator-precedence

根据C/C++语言的运算符优先级表(参见维基百科),自增运算符(++)优先于赋值运算符(=)。

谁能解释为什么在这个简单的程序中编译器首先分配值(bill[x] 中的 1)然后增加索引值(i++)。我觉得应该是相反的(先增加再赋值):

#include <iostream>
using namespace std;

int bill[] = {16, 17, 18, 19, 20};

int main ()
{
  int i = 3;

  bill[(i++)] = 1; // I think it should be bill[4] = 1;

  cout << bill[0] << endl;
  cout << bill[1] << endl;
  cout << bill[2] << endl;
  cout << bill[3] << endl;
  cout << bill[4] << endl;

  cout << "Index value:" << i << endl;

  return 0;
}

输出是:

16
17
18
1
20
Index value:4

我做错了什么?

最佳答案

i 正在递增,但在它用作数组访问器之前不会递增。要得到你要找的东西,试试 `++i' 代替。 (前缀而不是后缀。)

关于c++ - 为什么 C++ 编译器在这个简单的程序中不给予优先权(赋值下的递增运算符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8380960/

相关文章:

c - 我应该使用什么编译器作为自学编译器原理技术的案例研究

operators - 有没有办法在 SML/NJ 中获得二元运算符的柯里化(Currying)形式?

Perl:.=~是什么意思

c++ - MaxPairwiseProduct 程序的段错误(核心转储)运行时错误

c++ - 尝试将右值传递给元组时错误使用已删除函数

c++ - lambda 参数可以隐藏非捕获变量吗?

java - 如何从 Java 源代码生成 AST?

c++ - 内存:编译器如何选择存储变量的位置?

c++ - 全局变量增量如何在 C++ 中工作

php - PHP 中的 == 和 === 运算符