在 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 }) {}
};
对于包含字符串向量的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 }) {}
};