編譯器應該優化兩個代碼到同一個程序集,所以它沒有什麼區別。兩者都採取同一時間。
更有效的討論將是
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