(1):++i是在i上直接加1,表示式的值是i本身
i++也是在i上加1,表示式的值是加1前的副本
因為要存副本,所以效率略低,但是實際上大部分編譯器都會完成這部分優化工作,但是對於自定義的迭代器之類的,就未必有優化了
(2):如果i是內建型別的,如int,效率是一樣的(沒有拷貝建構函式)。
如果是非內建型別的。如自定義型別a:
a& a::operator++();//++a
const a a::operator++(int);//a++,返回物件,呼叫拷貝建構函式
所以++a效率更高些。
(3):c++primer上面有說:對於老舊的編譯器++i效率好,對於好的編譯器i++被優化了(效率一樣)。表示該用哪個用哪個。
(4):1、當變數i的資料型別是c++語言預設提供的型別的話,他們的效率是一樣的。
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
從彙編**可以看出,他們的執行行數是一樣的!
2、我們自定的資料型別,++i效率高於i++,通過運算子過載來給大家說明這一點。
operator operator::operator++()
operator operator::operator++(int)
看到了嗎?後++必須要有乙個臨時物件才可以完成。所以他的效率自然就下降了!
(4)解答是個人感覺是最靠譜的答案,就是在某種情況下(自定義型別),++i的效率確實高於i++;
i 和 i效率和過載問題
c 中 操作符過載問題 檢舉 2011 05 19 06 26st caonima5 分類 c c 瀏覽312次 1 cdate operator cdate operator 2 cdate operator int cdate是乙個已經定義好的類,現在要對 操作符進行過載,1 在兩個實現中,如何...
為什麼說 i比i 效率高?
不知道你是否聽說過 i比i 快的說法,真的如此嗎?這兩個表示式從我們初學程式語言的時候就會接觸到。前者是自增後取值,後者是取值後自增。我們看乙個簡單的例子。include using namespace std int main 編譯後報錯 main.cpp 7 19 error lvalue re...
i 與 i效率比較
1.對於i是內建型別,效率無差別,編譯器會自動優化 2.對於i為非內建型別,效率會存在不同,主要體現在其功能作用不同,i是將i值自增後返回,而i 是返回 i 的臨時變數,同時將i自增。可以猜想其過載操作符實現邏輯與下面 類似 classname classname operator classnam...