初始化列表是否适用于基类?如果是这样,如何?例如
struct A
{
int i;
};
struct B : public A
{
double d;
};
int main()
{
B b{ A(10), 3.4 };
return 0;
}
最佳答案
标准的第 8.5.1 节定义了聚合:
An aggregate is an array or a class (Clause 9) with no user-provided constructors (12.1), no brace-or-equal-initializers for non-static data members (9.2), no private or protected non-static data members (Clause 11), no base classes (Clause 10), and no virtual functions (10.3).
因为 B
有一个基类,所以不是聚合:你不能在这里使用聚合大括号初始化。
编辑:
不过,您可以提供一个构造函数来进行大括号初始化(但它仍然不是聚合初始化):
struct A
{
int i;
};
struct B : public A
{
B(int i, double d) : A {i}, d(d) {}
double d;
};
int main()
{
B b { 10, 3.6 };
return 0;
}
关于c++ - 初始化列表是否适用于基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372236/