Вперед, объявляя перечисление в C++
Причина, по которой перечисление enums не может быть объявлено вперед, заключается c++ в том, что, не зная значений, компилятор cxx не может знать объем памяти, необходимый cpp для переменной перечисления. Компиляторам cxx C++ разрешено указывать фактическое enums пространство для хранения c++ на основе размера, необходимого enum для размещения всех указанных enums значений. Если видно только enums предварительное объявление, единица enums перевода не может знать, какой enumerations размер памяти был выбран cxx — это может быть char
, int
или что-то c++ еще.
Из раздела 7.2.5 стандарта cxx ISO C++:
базовый тип перечисления — это cxx целочисленный тип, который enumerations может представлять все значения cpp перечислителя, определенные enums в перечислении. Какой целочисленный enumerations тип используется в качестве cxx базового типа для перечисления, определяется enum реализацией, за исключением enums того, что базовый тип не enumerations должен быть больше, чем
int
, если enumerations только значение перечислителя cxx не может поместиться вint
или enumunsigned int
. Если перечислитель-список пуст, базовый тип c++ таков, как если бы перечисление c++ имело один перечислитель cxx со значением 0. Значение cppsizeof()
, применяемое к типу перечисления, объекту c++ типа перечисления или перечислителю, является cxx значениеsizeof()
применяется к базовому enums типу.
Поскольку вызывающий функцию должен enums знать размеры параметров enum для правильной настройки enums стека вызовов, количество cpp перечислений в списке перечислений cxx должно быть известно до создания cpp прототипа функции.
Обновление:
В c++ C++0X был предложен и принят enum синтаксис для прямого объявления enums типов enum. Вы можете увидеть cxx предложение на Forward declaration of enumerations (rev.3)
c++
enums
Вперед, объявляя перечисление в C++
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.