成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么說++i的效率比i++高?

開發 后端 開發工具
++i和i++這兩個表達式從我們初學編程語言的時候就會接觸到。前者是自增后取值,后者是取值后自增。不知道你是否聽說過++i比i++快的說法,真的如此嗎?

不知道你是否聽說過++i比i++快的說法,真的如此嗎?

++i與i++的區別

這兩個表達式從我們初學編程語言的時候就會接觸到。前者是自增后取值,后者是取值后自增。

我們看一個簡單的例子。

  1. #include <iostream> 
  2. using namespace std; 
  3. int main() 
  4.     int a = 0
  5.     int b = 0
  6.     int c = a++;//int tmp = a;c=a;aa = a + 1 
  7.     int d = ++b;//bb = b + 1;d = b
  8.     cout<<"c="<<c<<";d="<<d<<endl
  9.     return 0; 

運行結果:

  1. c=0;d=1   

對于這個結果我們并不感到意外。

另外我們還注意到另外一個有意思的現象:

  1. #include <iostream> 
  2. using namespace std; 
  3. int main() 
  4.     int a = 0
  5.     int b = 0
  6.     int *c = &(a++); 
  7.     int *d = &(++b); 
  8.     return 0; 

編譯后報錯:

  1. main.cpp:7:19: error: lvalue required as unary ‘&’ operand 
  2.      int *c = &(a++); 

說&作用于左值,也就是說a++的結果并非左值。但++b的結果是左值。

可簡單理解左值和右值:

  • 左值,有名對象,可賦值
  • 右值,臨時對象,不可被賦值

運算符重載

通過前面的例子也發現了,對于內置類型,前置自增返回對象的引用,而后置自增返回對象的原值(但非左值)。

基于上述原則,一個前置版本和后置版本的常見實現如下:

  1. class Test 
  2. public: 
  3.     Test& operator++();//前置自增 
  4.     const Test operator++(int);//后置自增 
  5. private: 
  6.     int curPos; //當前位置 
  7. }; 
  8. /*前置自增實現范式*/ 
  9. Test& Test::operator++() 
  10.     ++curPos;      //自增 
  11.     return *this;  //取值 
  12. /*后置自增實現范式,為了與前置區分開,多了一個int參數,但從來沒用過*/ 
  13. const Test Test::operator++(int) 
  14.     Test tmp = *this;  //取值 
  15.     ++curPos;             //自增 
  16.     return tmp; 

仔細觀察后,我們發現前置自增,先自增,后返回原對象的對象;沒有產生任何臨時對象;而后置自增,先保存原對象,然后自增,最后返回該原臨時對象,那么它就需要創建和銷毀,這樣一來,效率孰高孰低就很清楚了。

在不進行賦值的情況下,內置類型前置和后置自增的匯編都是一樣的呢!

  1. void test() 
  2.   int i = 0
  3.   i++; 
  4.   //++i; 

匯編:

  1. push    rbp 
  2. mov     rbp, rsp 
  3. mov     DWORD PTR [rbp-4], 0 
  4. add     DWORD PTR [rbp-4], 1 
  5. nop 
  6. pop     rbp 
  7. ret 

不過,賦值的情況下,并且不開啟編譯器優化,它們的匯編代碼還是有差別的,有興趣的可以試試。

總結

對于內置類型,前置和后置自增或者自減在編譯器優化的情況下,兩者并無多大差別,而對于自定義類型,如無特別需要,人們似乎更加偏愛前置自增或自減,因為后置自增常常會產生臨時對象。

但是,又能提高多少效率呢?

 

責任編輯:趙寧寧 來源: 編程珠璣
相關推薦

2021-08-02 09:31:20

Python工具代碼

2021-11-24 07:56:56

For i++ ++i

2016-12-14 12:02:01

StormHadoop大數據

2017-02-14 14:20:02

StormHadoop

2024-01-31 23:47:17

i++++i編碼

2020-07-09 09:56:48

Python語言開發

2021-10-13 06:49:15

網絡 IO

2022-09-23 10:58:44

谷歌員工生產力大O表示

2022-05-10 15:59:44

split lock虛擬化

2021-05-12 08:15:53

HTTPSHTTP安全

2014-03-27 15:01:50

算法C++

2020-07-22 08:01:41

Python開發運算符

2020-07-16 15:20:13

switch...caif...else語言

2023-09-28 08:21:20

i++++i高并發

2017-12-19 16:24:20

2015-08-26 10:37:13

云主機物理機服務器故障

2020-02-24 12:34:21

JuliaPython編程語言

2017-12-28 14:39:06

電腦IO

2025-07-04 01:25:00

DebianMacWindows

2013-05-16 11:34:27

Google蘋果
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人综合视频在线 | japanhd美女动| 国产成人综合在线 | 青青草精品 | av看片网站 | 嫩草一区二区三区 | 欧美成人久久 | 范冰冰一级做a爰片久久毛片 | 欧美日韩电影免费观看 | 91精品国产美女在线观看 | 一级免费看片 | 免费观看一级毛片 | 亚洲综合无码一区二区 | 亚洲成人精品 | 国产亚洲精品美女久久久久久久久久 | 日韩一级精品视频在线观看 | 亚洲第一黄色网 | 亚洲国产精品一区 | 视频一区中文字幕 | 天天操一操| 亚洲一二三区在线观看 | 中文字幕1区2区 | 日韩精品一区二区三区四区 | 美国十次成人欧美色导视频 | 精品一区二区三区在线观看国产 | 麻豆av在线| 7777在线视频 | 精品综合久久久 | 丁香婷婷成人 | 蜜臀久久99精品久久久久久宅男 | 国产日韩电影 | 国产四虎 | 中文字幕一区二区三区四区 | 亚洲成人福利在线观看 | 精品一区二区三区不卡 | 免费簧片视频 | 亚洲精色 | 免费观看一级特黄欧美大片 | 久久久999成人 | 伊人狼人影院 | 精品久久久久久中文字幕 |