聽說你學過C+ +了,C+ +面試題:那+ +i和i+ +哪個效率高?


聽說你學過C+ +了,C+ +面試題:那+ +i和i+ +哪個效率高?

前言

當變量i的數據類型是c++語言默認提供的類型的話,他們的效率是一樣的。

 1.從其彙編執行的條數是一樣的,所以其執行效率是一樣的

聽說你學過C+ +了,C+ +面試題:那+ +i和i+ +哪個效率高?

看上圖應該明白,i++ 和 ++i 的效率差異主要來自於處理 i++ 時,需要先保存 i 的當前值留作稍後使用。如果之後沒有人使用 i 的當前值,也就是說沒有C語言代碼讀取 i++ 的值,編譯器實在沒有必要保存 i 的當前值了,因此就會將這一步優化掉。

2、我們自定的數據類型,++i效率高於i++,通過運算符重載來給大家說明這一點

C++ 中 ++運算符重載

前置和後置重載實現如下:

<code>#include <iostream>
#include <string>
using namespace std;
class Data
{
public:
\tData(){}
\tData(int num) :num(num)
\t{

\t}
\t//以++為例
\tvoid print()
\t{
\t\tcout << num << endl;
\t}
\t// warning C4620: 未找到類型“Data”的“運算符 ++”後綴形
\tData operator++(int)\t//int表示這個是後置,起說明作用
\t{
\t\tcout << "後置++" << endl;
\t\tData object(this->num++);
\t\treturn object;
\t}

\t//前置的
\tData operator++()
\t{
\t\tcout << "前置++" << endl;
\t\tthis->num++;
\t\treturn (*this);
\t}
protected:
\tint num;
};
//迭代器-->類
int main()
{
\tData object(1002);
\t//++ 的解釋: object=object+1;
\tData result = object++;
\tobject.print();
\tresult.print();
\tData result2 = ++object;
\tresult2.print();
\tobject.print();


\tsystem("pause");
\treturn 0;
}/<string>/<iostream>/<code>
聽說你學過C+ +了,C+ +面試題:那+ +i和i+ +哪個效率高?

後++必須要有一個臨時對象才可以完成,產生臨時對象,需要發生一系列的拷貝動作,效率自然比直接引用對象低很多。

尾言

文章都是手打原創,每天最淺顯的介紹C語言、C++,windows知識,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。如果足下基礎比較差,不妨關注下人人都可以學習的視頻教程,通俗易懂,深入淺出,一個視頻只講一個知識點。視頻不深奧,不需要鑽研,在公交、在地鐵、在廁所都可以觀看,隨時隨地漲姿勢。


分享到:


相關文章: