You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++赋值运算符返回值而非引用时,为何数组元素未按预期被修改?

问题原因解析

核心问题出在你实现的operator=返回值为值类型而非引用,破坏了连续赋值的语义。我们可以拆解(b[1] = b[2]) = b[0]这行代码的执行过程:

  1. 第一步执行b[1].operator=(b[2]):
    这一步确实会修改b[1]的_var值为b[2]的0。但由于你的operator=返回的是Base值类型,调用结束后会以*this为参数调用拷贝构造函数,生成一个和b[1]完全独立的临时对象。
  2. 第二步执行临时对象.operator=(b[0]):
    这次赋值操作修改的是临时对象的_var值为10,完全不会作用到数组里的b[1]本身。这行表达式结束后临时对象就会被销毁,所有修改全部无效。

最终b[1]的状态停留在第一步赋值后的0,所以程序输出和你的预期不符。

如果将operator=的返回值改为Base&,第一步调用结束后返回的是b[1]本身的左值引用,第二步赋值就会直接作用到b[1]上,自然就能得到你预期的10的结果。这也是C++中自定义赋值运算符的规范约定,目的是和内置类型的连续赋值行为对齐。

内容的提问来源于stack exchange,提问作者milanHrabos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:45:03