i++; //i的值作為返回值,i自增1
++i; //
i自增1,i的值作為返回值
現代編譯器產品會對**進行優化
優化使得最終的二進位制程式更加高效
優化後的二進位制程式丟失了c/c++的原生語義
不可能從編譯後的二進位制程式還原c/c++程式
++操作符可以被過載
全域性函式和成員函式均可以進行過載
過載前置++操作符不需要額外的引數
過載後置++操作符需要乙個int型別的佔位引數
classtest
intget_value()
//過載++(前置)操作符 (前置++效率高點,因為沒有生成額外的物件)
test& operator ++()
//過載++(後置)操作符
test operator ++(int
)
};
對於基礎型別的變數,前置++的效率與後置++的效率基本相同,我們需要根據專案組編碼規範進行選擇
對於類型別的物件,前置++的效率高於後置++,盡量使用前置操作符來提高程式的效率
2//前置和後置操作符.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。3//
4 #include 5 #include
6using
namespace
std;
7class
test815
intget_value()
1619
//過載++(前置)操作符 (前置++效率高點,因為沒有生成額外的物件)
20 test& operator ++()
2127
//過載++(後置)操作符
28 test operator ++(int)29
36};
37int
main()
38
執行結果:
t.mvalue=0
t.mvalue=1
tt.mvalue=1
tt.mvalue=1
編譯優化使得最終的可執行程式更加高效
前置++操作符和後置++操作符都可以被過載
++操作符的過載必須符合原生語義
對於基礎型別,前置++與後置++的效率幾乎相同
對於類型別,前置++的效率高於後置++
前置操作符和後置操作符
操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額外的引數 過載後置 操作符需要乙個int型別的佔位引數 來看乙個例子 include include using namespace std class test intvalue test operator test o...
40 前置操作符和後置操作符
下面的 有區別嗎?進入彙編 i i 的值作為返回值,i自增1 i i自增1,i的值作為返回值 include include using namespace std int main int value test operator 過載前置 操作符 test operator int 過載後置 操作...
40 前置操作符和後置操作符
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 值得思考的問題 1 下面的 有沒有區別?為什麼?i i 的值作為返回值,i自增1。i i自增1,i的值作為返回值test.cpp include using namespa...