在看《程式設計師面試筆試寶典》時,發現了這樣乙個問題,書中只給出了++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 在兩個實現中,如何...