for(int i(5) ; i-->0 ; )
{
//use i as iterator here
}
这与
相同吗? for(int i=5; i>0 ; i--)
??
我试图在谷歌中找到类似的声明,但没有找到任何内容
另外请建议更简洁的方式宣布同样的事情?
答案 0 :(得分:8)
不,这些不一样。在第一种情况下,i
将在第一次执行循环体之前递减。
有关正常工作的演示,请参阅http://ideone.com/AbHF3m。
答案 1 :(得分:4)
不一样。在第一种情况下,i
的值在第一次迭代中为4
,在最后一次迭代中为0
。在第二种情况下,i
在第一次迭代中为5
,在最后一次迭代中为1
。
修改强>
@ Y.Ecarri:
第一种情况:
i
设为5
i > 0
,即5 > 0
i
。 i
现在是4
i
值为4
第二种情况:
i
设为5
i > 0
,即5 > 0
i
值为5
i
。 i
现在是4
答案 2 :(得分:4)
不,这不一样。第一个版本在递减之前比较i
的值,并在每次迭代之前执行递减;第二个比较递减后的值,并在每次迭代后执行递减。
所以第一次迭代{4,3,2,1,0}
,而第二次迭代{5,4,3,2,1}
。
答案 3 :(得分:0)
它们与其他人指出的顺序不同:
如果此处i
是一个有符号的int,那么它可以达到-1,您可以用
for( int i=4; i >= 0; --i ) { // body
其意图看起来更为明显。如果你有一个unsigned int,例如size_t,您仍然可以通过切换顺序使其看起来更明显
for( size_t i = 5; 0 < i--; ) { // body
您也可以完全删除0和比较,然后执行
for( size_t i = 5; i--; ) { // body
在上述两种情况中,我仍然感到不安的是,当你真的希望它在第一次迭代时以4开始时,你启动i=5
。所以我甚至可以切换到...而...当然我必须在循环外初始化i
。
size_t i = 5;
do { // body
--i; // clearly 4 now on first iteration
} while( i != 0 );