i++與++i的效率差別

i++與++i的區別,我就不多說了。今天主要說明一下它們的效率上的差別。

如果只是對內建數據類型(如int),兩者的差別很小,基本上沒有,這個可以從彙編代碼上看出來。

但是如果對於C++裏的類,那++i和i++兩個是運算符重載,它們的區別就比較明顯了:
i++和++i的 最重要的區別大家都知道就是 +1和返回值的順序, 但,兩這還有一個區別(在C++中)就是i++在實現的時候,產生了一個local object.

class INT;   
//++i 的版本   
INT INT::operator++()   
{   
    *this = *this + 1;   
    return *this;   
}   
//i++ 的版本   
const INT INT::operator ++(int)   
{   
    INT oldvalue = *this;   
    *this = *this + 1;   
    return oldvalue; 
}   

所以從效率上來說++i比i++來的更有效率

for(i = n; i > 0; i--)

{
    ...
}

for(i = 0; i < n; i++)
{
    ...
}

爲什麼前者比後者快?
我當時的解釋是:
i–操作本身會影響CPSR(當前程序 狀態寄存器),CPSR常見的標誌有N(結果爲負), Z(結果爲0),C(有進位),O(有溢出)。i > 0,可以直接通過Z標誌判斷出來。
i++操作也會影響CPSR(當前程序狀態寄存器),但隻影響O(有溢出)標誌,這對於i < n的判斷沒有任何幫助。所以還需要一條額外的比較指令,也就是說每個循環要多執行一條指令。
轉自:http://blog.csdn.net/macrocrazier/article/details/8033745,感謝作者!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章