Стандартная компоновка и наследование - PullRequest
2 голосов
/ 18 августа 2011

В чем причина того, что во втором классе нет стандартного макета? (Visual Studio C ++)

#include <iostream>
#include <type_traits>

struct A
{
    int i;
};

struct B : public A
{
};

std::cout << "is_standard_layout<B> == "
          << std::boolalpha
          << std::is_standard_layout<B>::value // gives false
          << std::endl;

1 Ответ

2 голосов
/ 05 октября 2011

Согласно это MSVC поддерживает черты встроенного типа начиная с версии 8, но это , похоже, говорит о том, что вам нужна версия 11.

Раздел 9.7 определяет класс стандартной компоновки как класс, который:

  • не имеет нестатических членов-данных типа нестандартного класса (или массива таких типов) или ссылки,
  • не имеет виртуальных функций (10.3) и виртуальных базовых классов (10.1),
  • имеет одинаковый контроль доступа (пункт 11) для всех нестатических элементов данных,
  • не имеет базовых классов нестандартной компоновки,
  • либо не имеет нестатических элементов данных в наиболее производном классе и не более одного базового класса с нестатическими элементами данных, либо не имеет базовых классов с нестатическими элементами данных, и
  • не имеет базовых классов того же типа, что и первый нестатический элемент данных.

Здесь объяснение здесь .

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