为什么重载操作符,+=可以返回一个引用而+不可以?

oldmanzhao 2007-11-10 11:59:03
求教
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
loops 2007-11-11
  • 打赏
  • 举报
回复
哦,能通过,看来编译器真是把y+z当成是函数调用了,而=不是解释成operator=了
lleon 2007-11-11
  • 打赏
  • 举报
回复
MyClass &x = (y += z );
y += z 返回的引用是指向y的, 所以x是y的引用, 不会有临时变量的问题.
loops 2007-11-11
  • 打赏
  • 举报
回复
临时变量在某些情况下会延长生命周期的。
比如被引用的时候,相当于有了名字了。
不过我强烈怀疑:MyClass &x = y + z; 能通过编译吗?
lleon 2007-11-11
  • 打赏
  • 举报
回复
+是将两个对象值相加, 结果放在一个临时变量中, 如果返回引用, 就是指这个临时变量的引用
MyClass &x = y + z;
上面的变量定义将y+z返回的引用赋给x, 但是上面的语句执行完后, 临时变量消毁, x也就没意义了.
飞哥 2007-11-11
  • 打赏
  • 举报
回复
考虑是否作左值
blldw 2007-11-11
  • 打赏
  • 举报
回复
一般情况下,+运算符的两个操作数认为只是本身参与计算,但是内容并不改变,除非想使类对象经过某种运算之后改变自身或者返回左值,才考虑用引用。
tjltail 2007-11-11
  • 打赏
  • 举报
回复
y + z 产生的临时变量是const MyClass类型,这个应该通不过编译的呀
const MyClass& x = y + z ;

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧