c++ - 如何使用转换构造函数来初始化 vector

标签 c++

我有两个类(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/

相关文章:

C++11 - 计算数字 vector 中的模式时出错

c++ - 初始化程序无法确定字符数组的大小

c++ - Qt:槽返回值的含义?

c++ - 编译错误: 'head' does not name a type [duplicate]

c++ - 错误/var/tmp/kdecache 由 uid 1000 而不是 uid 0 拥有

c++ - 为什么 is_default_constructible<Class>::value 在同一类范围内失败

c++ - 确定下载的文件是否与现有文件相同的函数

c++ - 'ofstream' 和 'fstream' 读取文件

c++ - 如何计算冒泡排序中的交换?

c++ - 向上转换为基类对象而不是引用有什么不良影响?