Обычно будет выведено 1 1, но стандарт не фиксирует именно эти размеры. Каждый самостоятельный объект пустого типа должен иметь ненулевой размер; пустая базовая часть может не занимать отдельного места.
Размеры пустых типов и их наследование
Обычно будет выведено 1 1, но стандарт не фиксирует именно эти размеры. Каждый самостоятельный объект пустого типа должен иметь ненулевой размер; пустая базовая часть может не занимать отдельного места.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какой результат будет выведен программой?
void checkEmptyStructs()
{
struct EmptyBase {};
struct EmptyDerived : EmptyBase {};
std::cout << sizeof(EmptyBase) << " " << sizeof(EmptyDerived);
}
Ответ
Обычно будет выведено 1 1, но стандарт не фиксирует именно эти размеры. Каждый самостоятельный объект пустого типа должен иметь ненулевой размер; пустая базовая часть может не занимать отдельного места.
Минимальный размер нужен, в частности, для различимости адресов разных объектов одного типа в массиве. EmptyDerived остаётся пустым по данным, и типичная реализация применяет оптимизацию пустого базового класса.
Точный sizeof зависит от реализации и выравнивания, поэтому переносимый вывод здесь — оба размера положительны, а не обязательное равенство единице. К выводу программа не добавляет перевод строки.