日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

++i和i++效率谁高

發布時間:2025/7/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ++i和i++效率谁高 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2014屆搜狗校招筆試題再次提到了這個經典的問題,去百度上查資料解答是:

(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++() { ++value; //內部成員變量 return *this; }
Operator Operator::operator++(int) { Operator temp; temp.value=value;
value++; return temp; }
看到了嗎?后++必須要有一個臨時對象才可以完成。所以他的效率自然就下降了!
(4)解答是個人感覺是最靠譜的答案,就是在某種情況下(自定義類型),++i的效率確實高于i++;

原文鏈接:http://www.cplusplus.me/1303.html
出自:http://www.douban.com/note/317754047/

轉載于:https://blog.51cto.com/jogging/1623163

總結

以上是生活随笔為你收集整理的++i和i++效率谁高的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。