作者d630200x (DOGE)
看板C_and_CPP
标题[问题] 运算子多载一问
时间Sun Jun 17 18:17:08 2018
在一般运算子多载中的宣告为下
传回型别 operator运算子符号(.....)
然而看到比如要多载++前置或者是右移运算子>>时
宣告会变成
传回型别& operator运算子符号(.....)
个人不太能理解这个&的意义,翻来翻去也没有找到解答
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 119.14.29.43
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1529230631.A.672.html
1F:→ uranusjr: 因为它必须要能够回传被作用的物件本身 06/17 18:46
2F:→ uranusjr: a.prefix_inc() 的回传值必须要能够是 a 本身 06/17 18:48
3F:→ uranusjr: 你可以想想看上面要怎麽实作, 就知道没有参考做不出来 06/17 18:48
4F:推 jerryh001: reference type 而比较不精确的说法是回传物件本体 06/17 19:16
5F:→ sarafciel: 拿最单纯的int来说 i+1是右值,++i是左值 06/17 19:33
6F:→ sarafciel: 而左值必须要有明确的记忆体位址 右值不用 06/17 19:35
7F:→ sarafciel: 所以你看到的一般运算符是回传纯value 06/17 19:37
8F:→ sarafciel: 而prefix++这种就必须带reference 他才会带记忆体位置 06/17 19:39
9F:→ sarafciel: 要写回传纯value的++也可以 只是这样就跟大多数人理解 06/17 19:44
10F:→ sarafciel: 的prefix++有落差这样 06/17 19:44
11F:→ sarafciel: 至於>>这个东西虽然C原生是回右值的 不过C++又把>>拉去 06/17 19:47
12F:→ sarafciel: 做iostream的运算符 你看到的>>重载我猜应该是拿来接 06/17 19:49
13F:推 sarafciel: iostream用的 06/17 19:50