有这个代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
为什么变量的初始化a有效,但变量没有b?
jua*_*nza 12
A是一个聚合,因此可以有大括号初始化,而B不是,因为它有一个虚方法.
8.5.1聚合
聚合是一个数组或类(第9节),没有用户提供的构造函数(12.1),非静态数据成员(9.2)没有大括号或相等的初始值,没有私有或受保护的非静态数据成员(第11条),没有基类(第10条),没有虚函数(10.3).