如何使用基类的初始化列表?

时间:2013-05-20 19:02:57

标签: c++ c++11 inheritance constructor initialization-list

鉴于以下内容:

struct A
{
    int foo;
    int bar;
};

struct B : public A
{
    int baz;
};

如何使用初始化列表构建B,该列表也构造A中的元素?以下似乎不起作用,但我正在寻找类似的东西:

B my_b{{1, 2}, 3}; // foo = 1, bar = 2, baz = 3

1 个答案:

答案 0 :(得分:3)

如果不添加显式构造函数并自己完成大部分工作,则无法执行此操作:

struct B : public A
{
  B(const A &a, int _baz) : A{a}, baz{_baz} {}
  int baz;
};

B my_b{{1, 2}, 3};

并且您必须让该容器与B成员保持同步。

如果您使用了包含而不是继承,那么B仍然是一个聚合,因此您可以使用聚合初始化。