Означает ли тип агрегата, что это также стандартная компоновка? - PullRequest
3 голосов
/ 07 ноября 2019

Означает ли тип агрегата (std::is_aggregate_v<T> == true), что тип также является стандартным макетом (std::is_standard_layout_v<T> == true) или нет? Моя интуиция заключается в том, что ответ - да, но я не совсем уверен в этом.

Ответы [ 2 ]

4 голосов
/ 07 ноября 2019

Нет, это не так. Чтобы тип класса был стандартным макетом, все его нестатические члены сами должны быть стандартным макетом. Но это же рекурсивное требование не накладывается на агрегаты. Таким образом, простой пример счетчика

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

struct foo {
    bar b;
};

foo является агрегатом, но не является стандартной компоновкой.

3 голосов
/ 07 ноября 2019

Нет. Представьте, что у вас есть настройка, подобная

struct A
{
    int a;
};

struct B : A
{

};

struct C : B
{
    int c;
};

Здесь A, B и C - все агрегаты, но только A и B - стандартная компоновка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...