В С++ есть ли разница в использовании памяти между классом перечисления и перечислением?

Я понимаю преимущества использования строго типизированного «класса перечисления» над «перечислением», но мы с одноклассником задаемся вопросом, занимает ли тот или другой больше памяти.


person jamesc1101    schedule 12.07.2016    source источник
comment
Я не вижу причин для класса enum использовать больше памяти (если вы не указали большой базовый тип). Почему бы не создать простую программу и не поэкспериментировать?   -  person Aleksei Petrenko    schedule 12.07.2016
comment
Я полагаю, что большинство различий будут обрабатываться во время компиляции, а не во время выполнения (без изменений в памяти). Однако это должно быть довольно легко проверить - просто создайте две (почти) идентичные программы, скомпилируйте и сравните.   -  person Conduit    schedule 12.07.2016


Ответы (1)


enum classs по-прежнему являются целыми значениями без дополнительных накладных расходов. Однако базовый тип enum class по умолчанию равен int, в то время как обычный enum тип не указан, и реализация может выбрать минимальный целочисленный тип. Таким образом, теоретически, если вы не укажете базовый тип, enum class может быть больше, чем обычный enum.

Спецификация C++ 7.2.5 — Замедление перечисления

enum class

Базовый тип может быть явно указан с помощью enum-base; если это не указано явно, базовым типом перечисления с областью действия является int.

enum

Если для первого перечислителя не указан инициализатор, инициализирующее значение имеет неопределенный целочисленный тип.

person Motti    schedule 12.07.2016
comment
Спасибо за отличный, хорошо документированный и понятный ответ! - person jamesc1101; 12.07.2016
comment
Это также отличный урок, чтобы узнать, что если ограничения памяти вызывают беспокойство, я могу указать тип данных для использования. Например: enum class Color: char {Red, White, Blue}; - person jamesc1101; 12.07.2016