有这段代码:
struct A {
int x;
void f() {}
};
struct B {
int y;
virtual void f() {}
};
A a = {2};
//B b = {3}; error: no matching constructor for initialization of 'B'
int main() {
return 0;
}
为什么变量a
的初始化有效,但变量b
没有?
答案 0 :(得分:10)
A
是一个聚合,因此可以进行大括号初始化,B
不是,因为它有一个虚方法。
8.5.1聚合
聚合是一个数组或类(第9条),没有用户提供的构造函数(12.1),没有大括号或等于 非静态数据成员的初始化程序(9.2),没有私有或受保护的非静态数据成员(第11条), 没有基类(第10条),也没有虚函数(10.3)。