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

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

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

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

3

Решение

C ++ 11 определяет стандартное расположение :

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

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]