9

有这个代码:

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

4

1 回答 1

12

A是一个聚合,因此可以进行大括号初始化,B但不是,因为它有一个虚方法。

8.5.1 聚合

聚合是一个数组或一个类(第 9 条),没有用户提供的构造函数(12.1),没有非静态数据成员的大括号或等号初始化器(9.2),没有私有或受保护的非静态数据成员(第 11 条),没有基类(第 10 条),也没有虚函数(10.3)。

于 2013-05-16T19:25:13.417 回答