如何解决我可以将调用复制构造函数的两种语法分为两种不同的方法吗?
由于可以通过使用与参数具有相同类型的另一个对象进行构造或通过赋值来调用复制构造函数,所以我想知道是否可以将两者分开。
我尝试进行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;
}
解决方法
是的,在您的特定示例中,您可以区分以下两个版本:
class Thing {
public:
Thing() {
}
explicit Thing(Thing& from) {
std::cout << "Constructor One\n";
}
Thing(Thing const&) {
std::cout << "Constructor Two\n";
}
};
现在初始化将调用不同的构造函数:
int main()
{
Thing thing1;
Thing thing2(thing1); // Constructor One
Thing thing3 = thing1; // Constructor Two
return 0;
}
这里是demo。
请注意,这仅适用于您的示例,因为thing1
是非常量的。如果是const,则两个初始化版本都将调用2nd构造函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。