use*_*020 5 c++ initializer-list
初始化列表是否适用于基类?如果是这样,怎么样?例如
struct A
{
int i;
};
struct B : public A
{
double d;
};
int main()
{
B b{ A(10), 3.4 };
return 0;
}
Run Code Online (Sandbox Code Playgroud)
标准的 \xc2\xa7 8.5.1 节定义了一个聚合:
\n\n\n\n\n聚合是一个数组或类(第 9 条),没有用户提供的构造函数 (12.1),没有非静态数据成员的大括号或等于初始化器 (9.2),没有私有或受保护的非静态数据成员(第 11 条),无基类(第 10 条),并且无虚函数(10.3)。
\n
由于B有基类,因此不是聚合:您不能在此处使用聚合大括号初始化。
编辑 :
\n\n但是,您可以提供一个构造函数来使大括号初始化工作(但它仍然不是聚合初始化):
\n\nstruct A\n{\n int i;\n};\n\nstruct B : public A\n{\n B(int i, double d) : A {i}, d(d) {}\n double d;\n};\n\n\nint main()\n{\n B b { 10, 3.6 };\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n