(C )i 和 i,哪個效率高一些

2021-09-25 19:33:29 字數 1214 閱讀 4216

在看《程式設計師面試筆試寶典》時,發現了這樣乙個問題,書中只給出了++i的效率高一些,但並沒有給出具體的解釋和說明。

在網上找到下面的答案:

1、從高階層面上解釋

++i 是i=i+1,表示式的值就是i本身

i++ 也是i=i+1,但表示式的值是加1前的副本,由於要先儲存副本,因此效率低一些。

對於c++內建型別而言,大部分編譯器會做優化,因此效率沒什麼區別。但在自定義型別上,就未必有優化,++i 效率會高一些。

2、從底層彙編來看內建型別

int a,i=0; a=++i;彙編**如下:

int a,i=0;

01221a4e mov dword ptr [i],0

a=++i;

01221a55 mov eax,dword ptr [i]

01221a58 add eax,1

01221a5b mov dword ptr [i],eax

01221a5e mov ecx,dword ptr [i]

01221a61 mov dword ptr [a],ecx

int a,i=0; a=i++;彙編**如下:

int a,i=0;

009e1a4e mov dword ptr [i],0

a=i++;

009e1a55 mov eax,dword ptr [i]

009e1a58 mov dword ptr [a],eax

009e1a5b mov ecx,dword ptr [i]

009e1a5e add ecx,1

009e1a61 mov dword ptr [i],ecx

從上述彙編**可以看到,對於內建型別,它們的執行數目是一樣的,效率沒有差別。

3、從過載運算子來看自定義型別

operator operator::operator++()

operator operator::operator++(int)

從上面**可以看出,後置++多了乙個儲存臨時物件的操作,因此效率自然低一些。

總結:

對於c++內建型別,兩者的效率差別不大;

對於自定義的類而言,++i 的效率更高一些。

i 與i 哪個效率更高?

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

面試題 i 和 i哪個效率更高

include int main 簡單地比較字首自增運算子和字尾自增運算子的效率是片面的,因為存在很多因素影響這個問題的答案。考慮內建資料型別的時候,它們的效率差別不大 去除編譯器的影響 考慮自定義資料型別 主要是指類 的情況。此時我們不需要再做很多彙編 的分析,因為字首式 i 可以返回物件的引用,...

i 和 i效率和過載問題

c 中 操作符過載問題 檢舉 2011 05 19 06 26st caonima5 分類 c c 瀏覽312次 1 cdate operator cdate operator 2 cdate operator int cdate是乙個已經定義好的類,現在要對 操作符進行過載,1 在兩個實現中,如何...