Я просматривал отличные статьи о классах C++ POD, Trivial и Standard Layout . Одно свойство стандартного макета, которое я не совсем понял, заключается в следующем:-
A standard layout has no base classes of the same type as the first
non-static data member
Таким образом, следующее не будет стандартным макетом, поскольку он имеет первый член, такой же, как базовый класс
struct NonStandardLayout3 : StandardLayout1 {
StandardLayout1 x; // first member cannot be of the same type as base
};
Но с точки зрения производительности -и свойств -чем вышеприведенная структура отличается от
struct StandardLayout5 : StandardLayout1 {
int x;
StandardLayout1 y; // can have members of base type if they're not the first
};
что является исправлением того, что выше этого.