c ++ 11向量初始化函数调用

and*_*dge 21 c++ vector c++11

我有一个关于在c ++ 11中定义向量的新快捷方式的问题.假设我有以下课程

struct Tester{

  vector< vector<int> > data;

  Tester(){
    data = vector< vector<int> >();
  }

  void add(vector<int> datum){
    data.push_back(datum);
  }

};
Run Code Online (Sandbox Code Playgroud)

然后,以下按预期工作:

int main(){
    Tester test = Tester();
    vector<int> datum = vector<int>{1,2,3};
    test.add(datum);
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

int main(){
    Tester test = Tester();
    test.add(vector<int>{1,2,3});
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下这个区别吗?如何在第二个main()中执行我尝试的快捷方式?

Naw*_*waz 25

您的代码似乎没问题,但您使用的编译器不是(这似乎是旧的).

顺便说一句,你做得太多了.

这应该足够了:

vector<int> datum{1,2,3}; //initialization

test.add({1,2,3}); //create vector<int> on the fly and pass it to add()
Run Code Online (Sandbox Code Playgroud)

不要忘记更新编译器.

而且,这条线data = vector< vector<int> >();也太多了.这不是必需的.向量是自动构造的,这意味着您可以将类的构造函数留空,或者根本不使用它,因为它无论如何都不会执行任何操作.