Возможный дубликат:
Какие типы POD в C ++?
Я пишу интерпретатор на C ++, и я хочу убедиться, что определенные типы данных C ++ имеют предсказуемое расположение, когда они доступны через интерпретируемый код, особенно при использовании отражения. Так, например, я хочу убедиться, что первое поле данных всегда с нулевым смещением от адреса объекта. Теперь это тривиально для чисто POD-типов. Однако мне интересно, может ли это работать и с объектами, которые имеют наследование или имеют конструкторы, если я избегаю очевидных вещей, таких как виртуальные функции или множественное наследование. Разумно ли предположить, что компилятор будет размещать эти типы так же, как компилятор C, или «неуказанное поведение» в стандарте C ++ будет чем-то, о чем мне нужно беспокоиться?
C ++ 11 определяет стандартное расположение :
Стандартный макет предназначен для того, чтобы уловить первое намерение — создать что-то с макетом, таким же, как в C
и это то, что вы ищете. Поэтому ваш чек должен быть:
static_assert( std::is_standard_layout<A>::value, "not standard layout" );
Других решений пока нет …