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