我想问一下以下两个陈述是否有任何区别:
// C++11
std::vector<int> d {1, 2, 3};
std::vector<int> d = {1, 2, 3};
在这两种情况下都会调用序列构造函数:
class A {
public:
int a;
A() {
cout << "default constructor" << endl;
};
A(const A& other) {
cout << "copy constructor" << endl;
};
A& operator =(const A& other) {
cout << "assignment operator" << endl;
}
A(std::initializer_list<int> e) {
cout << "sequence constructor" << endl;
};
A& operator =(std::initializer_list<int> e) {
cout << "initializer list assignment operator" << endl;
}
};
int main(int argc, char** argv) {
A a {1, 2}; // sequence constructor
A b = {1, 2}; // sequence constructor
b = {1, 2}; // initializer list assignment operator
}
答案 0 :(得分:6)
例如。
A myA{...};
将始终调用相应的构造函数。
但是在做
A myA = ...;
将根据赋值右侧的表达式执行不同的操作,因为它可能会调用copy-constructor。或者使用copy-elision进行优化。
此外,如果你有一个数组,你必须使用赋值语法。