1. 程式人生 > >(三)運算子效率 前 ++ 和後 ++

(三)運算子效率 前 ++ 和後 ++

以上鍊接為百度所得,建議先仔細閱讀一遍

前++與後++區別

①、前++ 是先運算後賦值,後 ++ 是賦值後運算

②、前++ 不借助任何之間臨時變數,後 ++ 藉助了臨時變數

理解一點:無論是前 ++ 還是後 ++ 都是改變自身

解釋程式碼

#include <iostream>
using namaspace std;

int main(void)
{
    int a = 5;
    int b = 0;
    int c = 0;
    
    // 先對 a 進行運算再給 b 賦值
    b = ++a;
     
    // 先對 c 進行賦值再運算 a
    c = a++;
    // 問題:如何確保經過運算後的 a 不影響 c 的值呢?
    // 想法:有可能是 c 得到的可能不是 a 的值,而是一個其他值
    
}

簡單實現 ++ 運算子的兩種過載方式

#include <iostream>

using namespace std;

class Test
{
public:
    // 建構函式
    Test(int Data = 0)
    {
        // 證明有物件產生
        cout<<"地址:"<<&this<<endl;
        data = Data;
    }
    // 模擬前置 ++ 實現過程
    Test& operator++(Test &testClass)
    {
        // 這裡就不寫成 testClass.data++ 這種顯示了,害怕你認為編譯器處理
        // 整形 ++ 也是這樣實現的,你要清楚編譯器不是以這種方式實現前 
        // ++和後++的,這裡只是模仿
        testClass.data = testClass.data+1;
        return testClass;
        // 開始時沒有加入臨時資料,結束事也沒有臨時資料引數
    }

    // 模擬後置 ++
    Test operator(Test &testClass, int)
    {
        // 開始時產生臨時變數
        Test tmp = testClass;
        testClass.data = testClass + 1;
        return tmp;
        // 結束時 tmp 被釋放,但會有臨時變數接收 tmp 資料
        // 實際的返回是這個產生的臨時變數 
    }
    

private:
    int data;
};


int main(void)
{
    Test myTest(100);
    Test youTest;
    youTest = myTest++;
    youTest = ++myTest;    
    // 請單步除錯觀察現象
}


 總的來說:前++ 效率高於後 ++