MSCV 2010 --someNumber运算符的行为不正确

时间:2013-03-12 15:49:53

标签: c++ operators visual-studio-2010

在我的代码中,我有一个看起来像这样的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;
}

有没有其他人得到这种行为,还是我不知何故意外地抛出某种神奇的开关?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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循环生成代码 - 它是只是为了解释循环是如何运作的。