C++ 初始化列表对基类有效吗?
初始化列表对基类有效吗?如果是,怎么做?比如说C++ 初始化列表对基类有效吗?,c++,initializer-list,C++,Initializer List,初始化列表对基类有效吗?如果是,怎么做?比如说 struct A { int i; }; struct B : public A { double d; }; int main() { B b{ A(10), 3.4 }; return 0; } struct A { int i; }; struct B : public A { B( int x, double d ) : A { x }, d( d ) {} double d
struct A
{
int i;
};
struct B : public A
{
double d;
};
int main()
{
B b{ A(10), 3.4 };
return 0;
}
struct A
{
int i;
};
struct B : public A
{
B( int x, double d ) : A { x }, d( d ) {}
double d;
};
B b { 1, 2.0 };
结构B不是聚合类型。因此,您可能不会以这种方式使用带括号的init列表 然而,如果您要在类B中定义一个构造函数,那么您可以编写例如
struct A
{
int i;
};
struct B : public A
{
double d;
};
int main()
{
B b{ A(10), 3.4 };
return 0;
}
struct A
{
int i;
};
struct B : public A
{
B( int x, double d ) : A { x }, d( d ) {}
double d;
};
B b { 1, 2.0 };
本标准第§8.5.1节定义了骨料: 聚合是没有提供用户的数组或类(第9条) 构造函数(12.1),对于非静态 数据成员(9.2),无私有或受保护的非静态数据成员 (第11条),没有基类(第10条),也没有虚函数 (10.3) 因为
B
有一个基类,所以它不是聚合:您不能在这里使用聚合括号初始化
编辑:
但是,您可以提供一个构造函数使大括号初始化工作(但它仍然不是聚合初始化):
是否有任何理由不在构造函数中使用初始值设定项列表?