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

鏈接:http://www.cnblogs.com/AndyJee/p/4550391.html

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

在網上找到下面的答案:

1、從高級層面上解釋

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

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

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

2、從底層彙編來看內置類型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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、從重載運算符來看自定義類型

1
2
3
4
5
6
7
8
9
10
11
12
13
Operator Operator::operator++()
{
++value; //內部成員變量
return *this;
}
 
Operator Operator::operator++(int)
{
Operator temp;
temp.value=value;
value++;
return temp;
}

從上面代碼可以看出,後置++多了一個保存臨時對象的操作,因此效率自然低一些。

總結:

對於C++內置類型,兩者的效率差別不大;

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

 

參考文章:

http://www.cplusplus.me/1303.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章