编译器应该将两个代码都优化为同一个程序集,所以没有区别。两者都需要相同的时间。
一个更有效的讨论是是否
for(int i=0;i<10;++i) //preincrement
{
}
会比
更快
for(int i=0;i<10;i++) //postincrement
{
}
因为理论上,后增量会执行额外的操作(返回对旧值的引用)。但是,即使这样也应该针对相同的程序集进行优化。
如果没有优化,代码将如下所示:
for ( int i = 0; i < 10 ; i++ )
0041165E mov dword ptr [i],0
00411665 jmp wmain+30h (411670h)
00411667 mov eax,dword ptr [i]
0041166A add eax,1
0041166D mov dword ptr [i],eax
00411670 cmp dword ptr [i],0Ah
00411674 jge wmain+68h (4116A8h)
for ( int i = 0; i < 10 ; ++i )
004116A8 mov dword ptr [i],0
004116AF jmp wmain+7Ah (4116BAh)
004116B1 mov eax,dword ptr [i]
004116B4 add eax,1
004116B7 mov dword ptr [i],eax
004116BA cmp dword ptr [i],0Ah
004116BE jge wmain+0B2h (4116F2h)
for ( int i = 9; i >= 0 ; i-- )
004116F2 mov dword ptr [i],9
004116F9 jmp wmain+0C4h (411704h)
004116FB mov eax,dword ptr [i]
004116FE sub eax,1
00411701 mov dword ptr [i],eax
00411704 cmp dword ptr [i],0
00411708 jl wmain+0FCh (41173Ch)
所以即使在这种情况下,速度也是一样的。