for(int i(5) ; i-->0 ; )
{
//use i as iterator here
}
这是一样的吗
for(int i=5; i>0 ; i--)
??
我试图在谷歌中找到类似的声明,但没有找到任何东西
还请建议更简洁的方法来声明相同的东西?
for(int i(5) ; i-->0 ; )
{
//use i as iterator here
}
这是一样的吗
for(int i=5; i>0 ; i--)
??
我试图在谷歌中找到类似的声明,但没有找到任何东西
还请建议更简洁的方法来声明相同的东西?
不,这些不一样。在第一种情况下,i
将在第一次执行循环体之前递减。
有关工作演示,请参阅http://ideone.com/AbHF3m 。
这是不一样的。在第一种情况下, 的值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
不,不一样。第一个版本比较减量前的值,每次迭代i
前进行减量;第二个比较减量后的值,并在每次迭代后执行减量。
所以第一个迭代结束{4,3,2,1,0}
,而第二个迭代结束{5,4,3,2,1}
。
它们与其他人指出的不同,因为顺序是:
如果i
是一个有符号的 int,所以它可以达到 -1,你可以替换为
for( int i=4; i >= 0; --i ) { // body
它的意图看起来更明显。如果你有一个无符号整数,例如 size_t,你仍然可以通过切换顺序让它看起来更明显
for( size_t i = 5; 0 < i--; ) { // body
您也可以完全删除 0 和比较,然后执行
for( size_t i = 5; i--; ) { // body
在以上两个中,我仍然对您i=5
在第一次迭代中真正希望它以 4 开始时开始这一事实感到不舒服。所以我什至可能会切换到 do...while.. 当然我必须i
在循环之外进行初始化。
size_t i = 5;
do { // body
--i; // clearly 4 now on first iteration
} while( i != 0 );