使用虚函数对类进行大括号初始化

时间:2013-05-16 19:21:10

标签: c++ c++11

有这段代码:

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没有?

1 个答案:

答案 0 :(得分:10)

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

8.5.1聚合

  

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