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,感謝作者!