1

鉴于以下情况:

struct A
{
    int foo;
    int bar;
};

struct B : public A
{
    int baz;
};

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

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

1 回答 1

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仍然是聚合,因此您可以使用聚合初始化。

于 2013-05-20T19:11:38.530 回答