Полный объект пустого класса должен иметь ненулевой размер, в частности чтобы элементы массива были различимыми объектами. Часто размер равен 1, но стандарт не обещает именно это число.
Почему sizeof пустой структуры в C++ обычно равен 1 байту, а не 0?
Полный объект пустого класса должен иметь ненулевой размер, в частности чтобы элементы массива были различимыми объектами. Часто размер равен 1, но стандарт не обещает именно это число.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Полный объект пустого класса должен иметь ненулевой размер, в частности чтобы элементы массива были различимыми объектами. Часто размер равен 1, но стандарт не обещает именно это число.
Например, для struct Empty {}; реализация обычно выбирает один байт, однако выравнивание и особенности реализации могут увеличить размер. Отсутствие полей не означает, что полный объект занимает ноль байтов.
Отдельный случай — пустой базовый подобъект: empty base optimization может убрать его дополнительную стоимость. Для членов существует [[no_unique_address]], позволяющий некоторые формы перекрытия хранения. Эти возможности не означают, что sizeof(Empty) как самостоятельного типа становится нулём.