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

C++ this指针相关代码执行结果疑问,求底层运行原理解释

C++ this指针返回值逻辑解答

你对代码的执行逻辑的判断大部分是正确的,核心误区是忽略了成员函数内语句的执行先后顺序,我们可以把p.setX(1000).getX()的完整执行流程拆分为两步:

第一步:执行p.setX(1000)

进入setX成员函数后,语句是按顺序执行的:

  1. 首先执行this->x = x;:this指向调用该方法的原对象p,所以这一步会直接把原对象p的私有成员x的值修改为1000
  2. 之后才执行return *this;:此时*this就是已经完成x值修改的原对象p,由于setX的返回值类型是Point(值类型而非引用类型),会自动调用拷贝构造函数,生成一个和修改后的p完全一致的临时Point副本对象

第二步:执行临时副本的getX()

上一步返回的临时副本的x、y属性和修改后的p完全相同,x的值就是1000,所以调用getX()返回的结果自然是1000。

你可以额外做一个测试验证该逻辑:如果写链式调用p.setX(1000).setY(2000);,之后打印p.getY()会发现输出还是初始的20,因为setY修改的是setX返回的临时副本,不会影响原对象p的属性值。

// 补充测试代码片段
int main()
{
    Point p(10,20);
    p.setX(1000).setY(2000);
    cout << p.getX() << endl; // 输出1000,原对象x被setX修改
    cout << p.getY() << endl; // 输出20,setY修改的是临时副本,原对象y未变化
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:27:01