Размеры пустых типов и их наследование

Обычно будет выведено 1 1, но стандарт не фиксирует именно эти размеры. Каждый самостоятельный объект пустого типа должен иметь ненулевой размер; пустая базовая часть может не занимать отдельного места.

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

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

Обычно будет выведено 1 1, но стандарт не фиксирует именно эти размеры. Каждый самостоятельный объект пустого типа должен иметь ненулевой размер; пустая базовая часть может не занимать отдельного места.

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

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

Условие

Какой результат будет выведен программой?

void checkEmptyStructs()
{
    struct EmptyBase {};
    struct EmptyDerived : EmptyBase {};
    std::cout << sizeof(EmptyBase) << " " << sizeof(EmptyDerived);
}

Ответ

Обычно будет выведено 1 1, но стандарт не фиксирует именно эти размеры. Каждый самостоятельный объект пустого типа должен иметь ненулевой размер; пустая базовая часть может не занимать отдельного места.

Минимальный размер нужен, в частности, для различимости адресов разных объектов одного типа в массиве. EmptyDerived остаётся пустым по данным, и типичная реализация применяет оптимизацию пустого базового класса.

Точный sizeof зависит от реализации и выравнивания, поэтому переносимый вывод здесь — оба размера положительны, а не обязательное равенство единице. К выводу программа не добавляет перевод строки.

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

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

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

Подробнее