c = a + b;

来源:8-5 拷贝构造及临时对象的优化

avoidOverfitting

2020-10-23

老师,求问一下:这里的 Complex c = a + b; 整个过程是:
1)Complex c, 通过调用default ctor创建了一个 Complex object;
2)然后 重载+,用a 和 b 和创建了一个Complex tmp;
3)然后 重载=,把c中的_real 和_image 设置成了tmp中对应的值。
是这样吗?多谢。

写回答

2回答

quickzhao

2020-10-23

不是,这里重载=不会发生的;a+b得到的值会直接构造出c,不需要走重载=运算符。

1
0

avoidOverfitting

提问者

2020-10-24

接着上面的问题:

ok, 所以不重载=的原因主要是这里a+b直接接在 对c的定义 后面是嘛?相当于将c初始化为a+b的结果。

那么过程就是:

step1: 重载+,得到 a+b的一个tmp obj

疑问是第二步?

step2a: 用拷贝构造得到一个tmp的副本c,此时有tmp和c两个obj

step2b: 用有参的构造函数 ctor(_real, _image)生成c,此时也是有tmp和c两个obj

step2c: c就是tmp,地址一样。

1. 请问是2a,2b,2c哪种呢?如果是2c,是什么机制使得c和tmp就是一个obj的呢?是compiler的优化结果吗?这里理解的很模糊。麻烦老师解答。多谢老师!


0
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程