C++ this指针相关代码执行结果疑问,求底层运行原理解释
C++ this指针返回值逻辑解答
你对代码的执行逻辑的判断大部分是正确的,核心误区是忽略了成员函数内语句的执行先后顺序,我们可以把p.setX(1000).getX()的完整执行流程拆分为两步:
第一步:执行p.setX(1000)
进入setX成员函数后,语句是按顺序执行的:
- 首先执行
this->x = x;:this指向调用该方法的原对象p,所以这一步会直接把原对象p的私有成员x的值修改为1000 - 之后才执行
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
相关产品推荐
相关产品推荐

