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

c語言基礎 發佈 2020-03-31T16:46:01+00:00

前言當變量i的數據類型是c++語言默認提供的類型的話,他們的效率是一樣的。 1.從其彙編執行的條數是一樣的,所以其執行效率是一樣的看上圖應該明白,i++ 和 ++i 的效率差異主要來自於處理 i++ 時,需要先保存 i 的當前值留作稍後使用。


前言

當變量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知識,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。如果足下基礎比較差,不妨關注下人人都可以學習的視頻教程,通俗易懂,深入淺出,一個視頻只講一個知識點。視頻不深奧,不需要鑽研,在公交、在地鐵、在廁所都可以觀看,隨時隨地漲姿勢。

關鍵字: