编译器应该优化两个代码到同一个程序集,所以它没有什么区别。两者都采取同一时间。
更有效的讨论将是
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)
所以即使在这种情况下,速度是一样的。
你测试过了吗? –
你的循环有不同的界限:第一个运行0到9,第二个10到1。 – kkm