这些对象初始化之间的区别是什么

What is the difference between these object initialisations?

本文关键字:区别 是什么 之间 初始化 对象      更新时间:2023-10-16

有两种类型的对象初始化使用复制构造函数:

Class object2(val1, val2); // <--- (1)

同样可以通过复制另一个类的内容来完成:

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。案例1

Class object2(val1, val2);

将使用两个参数调用构造函数

Class(type a, type b);

2。案例2

Class object2 = object1;

将调用复制构造函数

Class(const Class&);

演示