【发布时间】:2020-08-18 19:01:47
【问题描述】:
由于可以通过使用与参数相同类型的另一个对象进行构造或通过赋值来调用复制构造函数,所以我想知道是否可以将两者分开。
我尝试制作 2 个变体(唯一的区别是用于复制对象的代码行)并为两者生成程序集,但程序集输出完全相同,这让我相信无法区分它们,除非它只是“优化”。
我可以有 2 个不同的复制构造函数,一个用于 Thing thing2(thing1),一个用于 Thing thing2 = thing1?
#include <iostream>
class Thing {
public:
Thing() {
}
Thing(const Thing& from) {
std::cout << "Copy constructor\n";
}
};
int main()
{
Thing thing1;
Thing thing2(thing1); // This line is identical
Thing thing3 = thing1; // to this one
return 0;
}
【问题讨论】:
-
它们并不完全相同。使构造函数
explicit,即explicit Thing(const Thing& from);,将显示差异。 -
如果您能做到这一点,您是否打算尝试做一些有用的事情?我很好奇是否有任何实际应用。
-
可能有点技术含量高,但
Thing thing3 = thing1;中的=不是作业。它只是看起来像。
标签: c++ g++ copy-constructor constructor-overloading