在 C++11 及更高版本中,有没有办法在初始化列表中初始化向量?

In C++11 and beyond, Is there a way to initialize a vector in an initializer list?

对于包含字符串向量的class,假设我们想要一个可以传入列表或单个值的构造函数。第二个构造函数如何调用初始化列表中的第一个?

class A {
private:
  std::vector<const char*> paths;
public:
  A(std::vector<const char*>& paths) : paths(paths) {}
  A(const char* p) : A(std::vector<const char*>( { p } ) {}
};

第二个构造函数不合法。我想不出语法。

A(const char* p) : A( {p} ) {}

也不是。

您正在创建一个临时向量,因此您应该在第一个构造函数中使用 const 引用:

class A {
private:
  std::vector<const char*> paths;
public:
  A(const std::vector<const char*>& paths) : paths(paths) {}
  A(const char* p) : A(std::vector<const char*>{ p }) {}
};

或者,考虑使用 r 值参考:

class A {
private:
  std::vector<const char*> paths;
public:
  A(std::vector<const char*>&& paths) : paths(std::move(paths)) {}
  A(const char* p) : A(std::vector<const char*>{ p }) {}
};