[問題] 運算子多載一問

看板C_and_CPP (C/C++)作者 (DOGE)時間7年前 (2018/06/17 18:17), 編輯推噓2(2011)
留言13則, 3人參與, 7年前最新討論串1/2 (看更多)
在一般運算子多載中的宣告為下 傳回型別 operator運算子符號(.....) 然而看到比如要多載++前置或者是右移運算子>>時 宣告會變成 傳回型別& operator運算子符號(.....) 個人不太能理解這個&的意義,翻來翻去也沒有找到解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.29.43 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1529230631.A.672.html

06/17 18:46, 7年前 , 1F
因為它必須要能夠回傳被作用的物件本身
06/17 18:46, 1F

06/17 18:48, 7年前 , 2F
a.prefix_inc() 的回傳值必須要能夠是 a 本身
06/17 18:48, 2F

06/17 18:48, 7年前 , 3F
你可以想想看上面要怎麼實作, 就知道沒有參考做不出來
06/17 18:48, 3F

06/17 19:16, 7年前 , 4F
reference type 而比較不精確的說法是回傳物件本體
06/17 19:16, 4F

06/17 19:33, 7年前 , 5F
拿最單純的int來說 i+1是右值,++i是左值
06/17 19:33, 5F

06/17 19:35, 7年前 , 6F
而左值必須要有明確的記憶體位址 右值不用
06/17 19:35, 6F

06/17 19:37, 7年前 , 7F
所以你看到的一般運算符是回傳純value
06/17 19:37, 7F

06/17 19:39, 7年前 , 8F
而prefix++這種就必須帶reference 他才會帶記憶體位置
06/17 19:39, 8F

06/17 19:44, 7年前 , 9F
要寫回傳純value的++也可以 只是這樣就跟大多數人理解
06/17 19:44, 9F

06/17 19:44, 7年前 , 10F
的prefix++有落差這樣
06/17 19:44, 10F

06/17 19:47, 7年前 , 11F
至於>>這個東西雖然C原生是回右值的 不過C++又把>>拉去
06/17 19:47, 11F

06/17 19:49, 7年前 , 12F
做iostream的運算符 你看到的>>重載我猜應該是拿來接
06/17 19:49, 12F

06/17 19:50, 7年前 , 13F
iostream用的
06/17 19:50, 13F
文章代碼(AID): #1R9ZKdPo (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1R9ZKdPo (C_and_CPP)