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,不需要走重载=运算符。
10 -
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的优化结果吗?这里理解的很模糊。麻烦老师解答。多谢老师!
00
相似问题