使用++运算符会导致意外的结果

Using ++ operator leads to unexpected results

本文关键字:意外 结果 运算符 使用      更新时间:2023-10-16

我不明白为什么下面的两个代码会导致相同的结果。后一个不是应该从6打印到10吗?因为n首先递增?

编辑:我使用了Visual Studio 2019和repl.it.

#include <iostream>
using namespace std;
int main() {
int n=5;
for (n; n<10; n++)
cout << n << endl;
return 0;
}
>>> 5
6
7
8
9
#include <iostream>
using namespace std;
int main() {
int n=5;
for (n; n<10; ++n)
cout << n << endl;
return 0;
}
>>> 5
6
7
8
9

来源https://en.cppreference.com/w/cpp/language/for

attr(可选(for(init语句条件(可选(;迭代表达式(可选((语句

上述语法生成的代码等效于:

{
init_statement
while ( condition ) {
statement
iteration_expression ;
} 
}

因此,您的两个for循环等效于

{
n;
while (n < 10) {
cout << n << endl;
n++;
}
}

{
n;
while (n < 10) {
cout << n << endl;
++n;
}
}

在for循环中:

  1. 第一条语句只执行一次
  2. 检查条件,如果为true
  3. 尸体被处决
  4. 然后执行迭代表达式
  5. 后藤(2.(

如果你想让循环从6开始,你需要明确地告诉它从6开始。

这里没有错,只是它应该如何工作

首先,你应该知道for循环的工作原理对于循环,在不损失通用性的情况下,可以写成:

for(exp1; exp2; exp3)
{
//body
} 

这里exp1将只在第一次进入循环时执行,然后exp2将被求值,如果true循环将继续,否则将不执行。exp3仅在每次迭代完成后进行评估。

i++和++i之间的唯一区别是,当你把它分配给某个东西时。假设我是5,然后在陈述之后

i++;

我6岁这也适用于以下语句:

++i;

但是假设i=5,但你可以试试这样的东西:

a=i++;

在这个陈述之后,a将是5,而我将是6。

但在这句话之后,在相同的初始条件下(i=5(:

a=++i;

a和我都6岁了。

唯一的区别是:

for (n; n<10; n++)

与。这个:

for (n; n<10; ++n)

for语句中的第一个和第三个表达式仅针对其副作用进行评估,并丢弃任何结果。(第二个是评估的,其结果用于确定是否继续循环。(n++++n之间的唯一区别是它们的结果;它们的副作用是相同的。因此在此上下文中n++++n实际上是相同的。

我还将提到第一个表达式n没有副作用,所以它可能会被省略:

for (; n<10; n++)

或者,更好的是,您可以将声明和初始化合并到循环中,替换现有的声明int n=5;:

for (int n = 5; n < 10; n++)