[问题] 运算子多载一问

楼主: d630200x (DOGE)   2018-06-17 18:17:08
在一般运算子多载中的宣告为下
传回型别 operator运算子符号(.....)
然而看到比如要多载++前置或者是右移运算子>>时
宣告会变成
传回型别& operator运算子符号(.....)
个人不太能理解这个&的意义,翻来翻去也没有找到解答
作者: uranusjr (←這人是超級笨蛋)   2018-06-17 18:46:00
因为它必须要能够回传被作用的物件本身a.prefix_inc() 的回传值必须要能够是 a 本身你可以想想看上面要怎么实作, 就知道没有参考做不出来
作者: jerryh001   2018-06-17 19:16:00
reference type 而比较不精确的说法是回传物件本体
作者: sarafciel (Cattuz)   2018-06-17 19:33:00
拿最单纯的int来说 i+1是右值,++i是左值而左值必须要有明确的内存位址 右值不用所以你看到的一般运算符是回传纯value而prefix++这种就必须带reference 他才会带内存位置要写回传纯value的++也可以 只是这样就跟大多数人理解的prefix++有落差这样至于>>这个东西虽然C原生是回右值的 不过C++又把>>拉去做iostream的运算符 你看到的>>重载我猜应该是拿来接iostream用的

Links booklink

Contact Us: admin [ a t ] ucptt.com