C ++ 11:v = {}和v {}之间的区别

时间:2014-03-16 09:22:11

标签: c++ c++11

我想问一下以下两个陈述是否有任何区别:

// 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
}

1 个答案:

答案 0 :(得分:6)

例如。

A myA{...};

将始终调用相应的构造函数。

但是在做

A myA = ...;

将根据赋值右侧的表达式执行不同的操作,因为它可能会调用copy-constructor。或者使用copy-elision进行优化。

此外,如果你有一个数组,你必须使用赋值语法。