Почему sizeof пустой структуры в C++ обычно равен 1 байту, а не 0?

Полный объект пустого класса должен иметь ненулевой размер, в частности чтобы элементы массива были различимыми объектами. Часто размер равен 1, но стандарт не обещает именно это число.

Короткий ответ

Что ответить на собеседовании

Полный объект пустого класса должен иметь ненулевой размер, в частности чтобы элементы массива были различимыми объектами. Часто размер равен 1, но стандарт не обещает именно это число.

Подробный разбор

Ответ с пояснениями

Полный объект пустого класса должен иметь ненулевой размер, в частности чтобы элементы массива были различимыми объектами. Часто размер равен 1, но стандарт не обещает именно это число.

Например, для struct Empty {}; реализация обычно выбирает один байт, однако выравнивание и особенности реализации могут увеличить размер. Отсутствие полей не означает, что полный объект занимает ноль байтов.

Отдельный случай — пустой базовый подобъект: empty base optimization может убрать его дополнительную стоимость. Для членов существует [[no_unique_address]], позволяющий некоторые формы перекрытия хранения. Эти возможности не означают, что sizeof(Empty) как самостоятельного типа становится нулём.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее