前言
當變量i的數據類型是c++語言默認提供的類型的話,他們的效率是一樣的。
1.從其彙編執行的條數是一樣的,所以其執行效率是一樣的
看上圖應該明白,i++ 和 ++i 的效率差異主要來自於處理 i++ 時,需要先保存 i 的當前值留作稍後使用。如果之後沒有人使用 i 的當前值,也就是說沒有C語言代碼讀取 i++ 的值,編譯器實在沒有必要保存 i 的當前值了,因此就會將這一步優化掉。
2、我們自定的數據類型,++i效率高於i++,通過運算符重載來給大家說明這一點
C++ 中 ++運算符重載
前置和後置重載實現如下:
#include <iostream>
#include <string>
using namespace std;
class Data
{
public:
Data(){}
Data(int num) :num(num)
{
}
//以++為例
void print()
{
cout << num << endl;
}
// warning C4620: 未找到類型「Data」的「運算符 ++」後綴形
Data operator++(int) //int表示這個是後置,起說明作用
{
cout << "後置++" << endl;
Data object(this->num++);
return object;
}
//前置的
Data operator++()
{
cout << "前置++" << endl;
this->num++;
return (*this);
}
protected:
int num;
};
//疊代器-->類
int main()
{
Data object(1002);
//++ 的解釋: object=object+1;
Data result = object++;
object.print();
result.print();
Data result2 = ++object;
result2.print();
object.print();
system("pause");
return 0;
}
後++必須要有一個臨時對象才可以完成,產生臨時對象,需要發生一系列的拷貝動作,效率自然比直接引用對象低很多。
尾言
文章都是手打原創,每天最淺顯的介紹C語言、C++,windows知識,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。如果足下基礎比較差,不妨關注下人人都可以學習的視頻教程,通俗易懂,深入淺出,一個視頻只講一個知識點。視頻不深奧,不需要鑽研,在公交、在地鐵、在廁所都可以觀看,隨時隨地漲姿勢。