在C ++中,聚合体(aggregate)是指(来自语言规范的8.5.1p1节)无用户提供的构造函数(12.1),无非静态数据成员的私有或保护访问控制(第11节),无基类(第10节)和无虚函数(10.3)的数组或类(第9节)。因此,
#1
不是一个聚合体,但#2
是一个聚合体。为什么#1
也不是聚合体呢?struct A { virtual void bark() { } int a; }; // #1
struct B { A b; }; // #2
struct
是否符合“数组或类”的资格。 - Frédéric Hamidistruct
、class
或union
声明的类。 - Johannes Schaub - litbB::b
的vtbl
指针也需要设置,所以我不确定为什么vtbls
会排除A
但不排除B
。 - Johannes Schaub - litb