2012-06-04 3 views
7

Определяет ли стандарт C++ компоновку компиляции класса и структуры? Как они компилируются по-разному, особенно если они пусты?Как скомпилирован пустой класс и пустая структура?

+0

Absolutelu «нет» по обоим соображениям по первому вопросу. У класса есть неявный «этот» указатель в ответ на второй вопрос. – paulsm4

+11

@ paulsm4: Ваш ответ на второй вопрос неверен. в этом отношении не существует никакой проблемы между «классом» и «структурой». Разумеется, 'struct' может иметь' virtual' членов. –

+5

Классы и структуры - это то же самое, единственное различие заключается в спецификации доступа по умолчанию (для членов и баз). – GManNickG

ответ

13

Он делает это в некотором смысле, он говорит, что он должен выделять пространство для него, если не определенные случаи, когда он используется как базовый класс (известный как Оптимизация пустого базового класса). Это гарантирует, что разные объекты имеют разные адреса.

Они скомпилированы таким же образом, что struct и class - это то же самое, за исключением спецификатора доступа по умолчанию. В C++ 11 введено понятие стандартных макетов классов/structs и гарантирует, что макет памяти для пустых классов будет одинаковым.

+1

Указывается, сколько места выделено? 1 байт? – Paranaix

+2

@Paranaix: Насколько я знаю, не указано. Это может быть более 1 байт для удовлетворения требований к выравниванию. –

+0

Размер ссылки зависит от архитектуры. Один адрес на x86 будет 32 бита. – starbolin

Смежные вопросы