聚合类型是否意味着它也是标准布局?

Does an aggregate type imply that it is also standard layout?

聚合类型 (std::is_aggregate_v<T> == true) 是否暗示该类型也是标准布局 (std::is_standard_layout_v<T> == true)?我的直觉是答案是肯定的,但我并不完全相信。

没有。想象一下你有一个像

这样的设置
struct A
{
    int a;
};

struct B : A
{

};

struct C : B
{
    int c;
};

这里ABC都是聚合,只有AB是标准布局。

不,不是。对于要成为标准布局的 class 类型,其所有非静态成员本身必须是标准布局。但相同的递归要求并未强加于聚合。所以一个简单的反例

struct bar {
  virtual ~bar() {}
};

struct foo {
    bar b;
};

foo是聚合,但不是标准布局