i++與++i的區別,我就不多說了。今天主要說明一下它們的效率上的差別。
如果只是對內建資料型別(如int),兩者的差別很小,基本上沒有,這個可以從彙編**上看出來。
但是如果對於c++裡的類,那++i和i++兩個是運算子過載,它們的區別就比較明顯了:
i++和++i的 最重要的區別大家都知道就是 +1和返回值的順序, 但,兩這還有乙個區別(在c++中)就是i++在實現的時候,產生了乙個local object.
class int;
//++i 的版本
int int::operator++()
//i++ 的版本
const int int::operator ++(int)
所以從效率上來說++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的判斷沒有任何幫助。所以還需要一條額外的比較指令,也就是說每個迴圈要多執行一條指令。
**:感謝作者!
i 與 i效率比較
1.對於i是內建型別,效率無差別,編譯器會自動優化 2.對於i為非內建型別,效率會存在不同,主要體現在其功能作用不同,i是將i值自增後返回,而i 是返回 i 的臨時變數,同時將i自增。可以猜想其過載操作符實現邏輯與下面 類似 classname classname operator classnam...
i 與 i的效率比較
解析 在這裡宣告,簡單的比較字首自增運算子和字尾自增運算子的效率是片面的,因為存在很多因素影響這個問題的答案。首先考慮內建資料型別的情況 如果自增運算表示式的結果沒有被使用,而是僅僅簡單的用於增加一員運算元,答案是明確的,字首法和字尾法沒有任何區別,編譯器的處理都應該是相同的,很難想象得出有什麼編譯...
i 與i 哪個效率更高?
解析 在這裡宣告,簡單的比較字首自增運算子和字尾自增運算子的效率是片面的,因為存在很多因素影響這個問題的答案。首先考慮內建資料型別的情況 如果自增運算表示式的結果沒有被使用,而是僅僅簡單的用於增加一員運算元,答案是明確的,字首法和字尾法沒有任何區別,編譯器的處理都應該是相同的,很難想象得出有什麼編譯...