i 與 i的效率差別

2021-07-08 17:02:29 字數 754 閱讀 4950

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 哪個效率更高?

解析 在這裡宣告,簡單的比較字首自增運算子和字尾自增運算子的效率是片面的,因為存在很多因素影響這個問題的答案。首先考慮內建資料型別的情況 如果自增運算表示式的結果沒有被使用,而是僅僅簡單的用於增加一員運算元,答案是明確的,字首法和字尾法沒有任何區別,編譯器的處理都應該是相同的,很難想象得出有什麼編譯...