在我的代码中,我有一个看起来像这样的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;
}
有没有其他人得到这种行为,还是我不知何故意外地抛出某种神奇的开关?
答案 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
循环生成代码 - 它是只是为了解释循环是如何运作的。