我有两个类(class),A
可以由 string
构建从而定义了 string
的转换至A
.
class A
{
public:
A(std::string s) : s_(s) {}
private:
std::string s_;
};
class B
{
public:
B() : v_{"foo", "bar"} {}
private:
std::vector<A> v_;
};
类B
有一个vector
成员包含 A
对象。构造函数用字符串初始化 vector ( v_
)。这是行不通的。为什么?
最佳答案
本质上,你的std::vector<A>
期望使用包含 A
的初始值设定项列表进行构造对象。编译器无法隐式转换 std::string
的初始值设定项列表对象合并为一个包含 A
的对象s,其他都没有std::vector
构造函数需要两个 std::string
s (即使一个构造函数这样做了,它也可能不会具有您正在寻找的含义)。
如果你写
B() : v_{A("foo"), A("bar")} {}
相反,它有效。现在你有一个初始化列表 A
s,它被正确解释。
关于c++ - 如何使用转换构造函数来初始化 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35082689/