这些对象初始化之间有什么区别?
What is the difference between these object initialisations?
有两种类型的对象初始化使用复制构造函数:
Class object2(val1, val2); // <--- (1)
同样可以通过复制另一个class的内容来完成:
Class object1(val1, val2);
Class object2 = object1; // <--- (2)
(1)和(2)有什么区别?
是显式调用还是隐式调用还是跟运算符重载有关?
两种构造都使用构造函数,但构造函数不同。第一个是带两个参数的构造函数,第二个通常是复制构造函数(可以默认)。明确的声明应该是这样的:
class Class {
// constructor taking 2 args
Class(int val1, const std::string& val2);
// copy ctor
Class(const Class& other);
/* you could optionaly have a move ctor:
Class(Class&& other); */
...
};
这里
1.案例一
Class object2(val1, val2);
将使用两个参数调用构造函数
Class(type a, type b);
2.案例2
Class object2 = object1;
会调用拷贝构造函数
Class(const Class&);
有两种类型的对象初始化使用复制构造函数:
Class object2(val1, val2); // <--- (1)
同样可以通过复制另一个class的内容来完成:
Class object1(val1, val2);
Class object2 = object1; // <--- (2)
(1)和(2)有什么区别? 是显式调用还是隐式调用还是跟运算符重载有关?
两种构造都使用构造函数,但构造函数不同。第一个是带两个参数的构造函数,第二个通常是复制构造函数(可以默认)。明确的声明应该是这样的:
class Class {
// constructor taking 2 args
Class(int val1, const std::string& val2);
// copy ctor
Class(const Class& other);
/* you could optionaly have a move ctor:
Class(Class&& other); */
...
};
这里
1.案例一
Class object2(val1, val2);
将使用两个参数调用构造函数
Class(type a, type b);
2.案例2
Class object2 = object1;
会调用拷贝构造函数
Class(const Class&);