整数向量的initializer_list语法

时间:2014-05-25 13:37:27

标签: c++ c++11 syntax initializer-list

为了理解如何使用 initializer_list ,我正在编写一个自己的构造函数来填充整数向量(解释here):

#include <vector>

class X
{
  std::vector< int > *vec;
public:
  X(std::initializer_list<int>);
};

X(std::initializer_list<int> values)
{
  this->vec = new std::vector<int>(values);
}

该行

X(std::initializer_list<int> values)
我的 g ++ -std = c ++ 11 在值之前无效的声明符被

拒绝。为什么?

2 个答案:

答案 0 :(得分:5)

正如Bo Persson注意到的那样:

X(std::initializer_list<int> values)

必须写

X::X(std::initializer_list<int> values)

答案 1 :(得分:1)

正如您所发现的,当您在类定义之外定义成员函数(包括特殊成员函数)时,必须使用完全限定名称。这是必要的,以表明您声明的功能是该类的成员,而不是自由功能。关于班级定义,还有其他一些事项需要解决。

class X
{
  std::vector< int > vec;
  //                ^^^     - it's unlikely this needs to be a pointer
public:
  X(std::initializer_list<int>);
};

X::X(std::initializer_list<int> values)
//^^^             - fully qualified name required
: vec(values)  // use the constructor initializer list 
               // instead of assignment within the body
{
}