如果我这样做:
MyClass a=b;
这里使用复制构造函数来初始化a
,=
不涉及运算符重载,对吧?
=
如果已经初始化,则将使用该运算符a
,然后我将其分配给其他东西。
我看到了这个:
S(std::initializer_list<T> l) : v(l) {
像这样使用:
S<int> s = {1, 2, 3, 4, 5}; // direct list-initialization
这是有趣的。它是初始化并使用=
运算符,但它调用的构造函数不是复制构造函数。为什么它不采用这样的语法:
S<int> s {1, 2, 3, 4, 5};
这就是带有 an的std::vector
构造函数std::initializer_list
的工作原理。当运算符不调用复制构造时,使用运算符初始化对象似乎令人困惑=
,不是吗?