(三)運算子效率 前 ++ 和後 ++
阿新 • • 發佈:2018-12-16
以上鍊接為百度所得,建議先仔細閱讀一遍
前++與後++區別
①、前++ 是先運算後賦值,後 ++ 是賦值後運算
②、前++ 不借助任何之間臨時變數,後 ++ 藉助了臨時變數
理解一點:無論是前 ++ 還是後 ++ 都是改變自身
解釋程式碼
#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; // 請單步除錯觀察現象 }