0

在我的代码中,我有一个看起来像这样的 for 循环:

for(unsigned int n=10; n > 1; --n)
{
  std::cout << n << std::endl;
}

我期望输出:

9、8、7、6、5、4、3、2、1

我得到的输出:

10, 9, 8, 7, 6, 5, 4, 3, 2

我在使用 gnu/g++ 时得到了预期的输出,但在 MSVC 2010 中没有。

我知道我通过执行以下操作获得了该循环的预期结果:

for(unsigned int n=9; n > 0; n--)
{
  std::cout << n << std::endl;
}

有没有其他人得到这种行为,或者我是否以某种方式意外地抛出了某种魔法开关?

4

2 回答 2

1

那里没有魔法,递减发生在循环的第一次迭代之后。这就是for循环的工作方式。不管是n--还是都没有区别--n

于 2013-03-12T15:50:42.950 回答
0

一个for循环可以(松散地)[1] 使用while

for(A; B; C)
{
   content of loop;
}

变成:

A;
while(B)
{
  content of loop;
  C;
}

所以,换句话说:

unsigned int n=10;
while(n > 1)
{
  std::cout << n << std::endl;
  --n;
}

现在,您可以清楚地看到为什么它正在做它正在做的事情。

[1] 当然,有了上面的“转换”,n变化的范围,这并不是要说明编译器如何为for循环生成代码——它只是为了解释循环是如何运行的。

于 2013-03-12T15:55:14.510 回答