Какие правила я должен соблюдать, чтобы гарантировать, что тип C++ является POD? [дубликат]


Возможный дубликат:
Что такое POD типы В C++?

Что такое агрегаты и стручки и как/почему они особенные?

Я пишу интерпретатор на языке C++ и хочу убедиться, что некоторые типы данных C++ имеют предсказуемый макет для доступа к ним через интерпретируемый код, особенно при использовании отражения. Поэтому, например, я хочу убедиться, что первое поле данных всегда находится на нулевом смещении от адреса объект. Теперь это тривиально для чисто стручковых типов. Однако мне интересно, может ли это также работать с объектами, имеющими наследование или конструкторы, если я избегаю очевидных вещей, таких как виртуальные функции или множественное наследование. Разумно ли предположить, что компилятор будет компоновать эти типы так же, как компилятор C, или "неопределенное поведение" в стандарте C++ будет чем-то, о чем мне нужно будет беспокоиться?

1 3

1 ответ:

C++11 определяет стандартную компоновку :

Стандартная компоновка предназначена для захвата первого намерения-создания чего-то с компоновкой, такой же, как и в C

И это то, что вы ищете. Поэтому ваш чек должен быть:

static_assert( std::is_standard_layout<A>::value, "not standard layout" );