看板 C_and_CPP 關於我們 聯絡資訊
在一般運算子多載中的宣告為下 傳回型別 operator運算子符號(.....) 然而看到比如要多載++前置或者是右移運算子>>時 宣告會變成 傳回型別& operator運算子符號(.....) 個人不太能理解這個&的意義,翻來翻去也沒有找到解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.29.43 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1529230631.A.672.html
uranusjr: 因為它必須要能夠回傳被作用的物件本身 06/17 18:46
uranusjr: a.prefix_inc() 的回傳值必須要能夠是 a 本身 06/17 18:48
uranusjr: 你可以想想看上面要怎麼實作, 就知道沒有參考做不出來 06/17 18:48
jerryh001: reference type 而比較不精確的說法是回傳物件本體 06/17 19:16
sarafciel: 拿最單純的int來說 i+1是右值,++i是左值 06/17 19:33
sarafciel: 而左值必須要有明確的記憶體位址 右值不用 06/17 19:35
sarafciel: 所以你看到的一般運算符是回傳純value 06/17 19:37
sarafciel: 而prefix++這種就必須帶reference 他才會帶記憶體位置 06/17 19:39
sarafciel: 要寫回傳純value的++也可以 只是這樣就跟大多數人理解 06/17 19:44
sarafciel: 的prefix++有落差這樣 06/17 19:44
sarafciel: 至於>>這個東西雖然C原生是回右值的 不過C++又把>>拉去 06/17 19:47
sarafciel: 做iostream的運算符 你看到的>>重載我猜應該是拿來接 06/17 19:49
sarafciel: iostream用的 06/17 19:50