Я понимаю преимущества использования строго типизированного «класса перечисления» над «перечислением», но мы с одноклассником задаемся вопросом, занимает ли тот или другой больше памяти.
В С++ есть ли разница в использовании памяти между классом перечисления и перечислением?
comment
Я не вижу причин для класса enum использовать больше памяти (если вы не указали большой базовый тип). Почему бы не создать простую программу и не поэкспериментировать?
- person Aleksei Petrenko   schedule 12.07.2016
comment
Я полагаю, что большинство различий будут обрабатываться во время компиляции, а не во время выполнения (без изменений в памяти). Однако это должно быть довольно легко проверить - просто создайте две (почти) идентичные программы, скомпилируйте и сравните.
- person Conduit   schedule 12.07.2016
Ответы (1)
enum class
s по-прежнему являются целыми значениями без дополнительных накладных расходов. Однако базовый тип enum class
по умолчанию равен int
, в то время как обычный enum
тип не указан, и реализация может выбрать минимальный целочисленный тип. Таким образом, теоретически, если вы не укажете базовый тип, enum class
может быть больше, чем обычный enum
.
Спецификация C++ 7.2.5 — Замедление перечисления
enum class
Базовый тип может быть явно указан с помощью enum-base; если это не указано явно, базовым типом перечисления с областью действия является
int
.
enum
Если для первого перечислителя не указан инициализатор, инициализирующее значение имеет неопределенный целочисленный тип.
person
Motti
schedule
12.07.2016
Спасибо за отличный, хорошо документированный и понятный ответ!
- person jamesc1101; 12.07.2016
Это также отличный урок, чтобы узнать, что если ограничения памяти вызывают беспокойство, я могу указать тип данных для использования. Например: enum class Color: char {Red, White, Blue};
- person jamesc1101; 12.07.2016