i i 運算子過載簡單理解

2021-09-24 06:33:27 字數 1204 閱讀 4989

左右值的由來

左右值這兩概念從c中傳承而來,在c中左值是指能夠出現在等號的左邊的變數(表示式),右值是指只能出現在等號右邊的變數(表示式)。

左右值的區別

左值的變數或表示式由兩部分組成,分別為資料值以及記憶體位址,而右值沒有記憶體位址。

簡單的小例子

#include

using

namespace

std;

void

main();

複製**

為什麼會這樣

這裡簡單的解釋一下i++為什麼返回的是右值++i返回的是左值

// i++在編譯器編輯執行時,內部流程如下: 

int temp;

temp = i;

i = i + 1;

// 這裡temp是個臨時變數,它的值是i的資料值,所以temp是個常量,常量不能作為左值。

return temp;

// ++i 如下理解:

i = i + 1;

// 這裡返回的是i本身。

return i;

複製**

運算子過載

#include

using

namespace

std;

class

test ;

// ++i 運算子過載, 這裡是左值所以返回乙個位址

test &operator++();

// 返回當前物件,這裡的this是指向當前物件的指標,如果想獲取值需要通過*操作符獲取。

return *this;

};/*

這裡i++需要傳入引數,不要問我為什麼,我也想知道c++11為啥這麼規定。

個人理解是為了區分i++還是++i過載,像函式過載一樣當編譯器編譯執行時,會自己匹配合適的過載函式。

*/test operator++(int);

// 返回當前物件的拷貝類

return t;

};void

info

(void)

; };

intmain();

複製**

ps: 博主還是新手村打b的小萌新,如果文章有誤請指出,謝謝。

簡單運算子過載

運算子過載的規則 過載為類成員的運算子函式定義形式 返回型別 operator 運算子 形參 引數個數 原運算元個數 1 後置 除外 例如如果你想實現兩個字串拼接直接用 str1 str2 那麼形參應該只有乙個,並且在呼叫過載函式時傳入的實參應該是str2 經過過載後,temp str1 str2 ...

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...