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

C++隐藏this指针使用疑问:链式调用add方法未修改原对象a的值

问题原因

你的add方法当前返回的是Something值类型,执行return *this时会调用拷贝构造函数生成一个全新的临时对象,而非原对象本身:

  • 第一次调用a.add(5):修改原对象a的m_value为5,返回一个和a当前状态一致的临时对象
  • 第二次调用.add(5):是在刚才生成的临时对象上执行修改,临时对象的m_value变为10,和原对象a没有关联
  • 最终临时对象赋值给b,所以b的值是10,a仅被修改过一次,值为5

修改方案

只需要把add方法的返回值改为Something&(左值引用)即可,这样返回的就是原对象本身的引用,不会生成额外拷贝:

// 修改后的add方法
Something& add(int value)
{
    m_value += value;
    return *this;
}

修改后执行a.add(5).add(5)的流程为:

  1. 第一次a.add(5)修改a的m_value为5,返回a的引用
  2. 第二次.add(5)直接在a本身执行修改,a的m_value变为10
  3. 最终a的值为10,b是a的拷贝,值也为10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:18:03