Каков размер пустого класса и разница между объединением, структурой и классом в C ++? - PullRequest
1 голос
/ 27 октября 2011

каков размер пустого класса и разница между объединением, структурой и классом в c ++?

Моя идея:

если в них нет статических элементов, они должны быть одинаковыми, поскольку все элементы размещены в стеке.

Если они все пусты, они одинаковы.

если у них есть статические элементы, это зависит от относительного расположения элементов внутри них.

верно?

спасибо

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

class == struct единственное отличие состоит в том, что в структуре все члены, то есть ivars и методы, по умолчанию являются открытыми.

статические члены, т.е. переменные или методы, не являются частью класса / структуры в том смысле, что они не принадлежат конкретному экземпляру. поэтому sizeof не будет включать их.

union не является ни классом, ни структурой, Union используется для сопоставления структуры с определенным макетом памяти.

чтобы получить размер, просто выполните sizeof() переменной экземпляра, и вы увидите.

1 голос
/ 27 октября 2011

C ++ Стандартный стандарт указывает, что размер пустого класса должен быть Non-Zero .
Обычно это 1 байт в большинстве систем.

По словам Бьярна Страуструпа, размер не равен нулю " Чтобы гарантировать, что адреса двух разных объектов будут разными."

Размер 1 на большинстве систем, потому что правила выравнивания не имеют значения, поскольку запись имени класса производится в таблице символов только для получения уникального адреса.

Для фанатов Standerdese:
C ++ 03 Стандартный раздел 9: Классы, параграф 2:

Завершенные объекты и дочерние подобъекты типа класса должны иметь ненулевой размер. 94)

...