Вперед, объявляя перечисление в 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 или enum unsigned int. Если перечислитель-список пуст, базовый тип c++ таков, как если бы перечисление c++ имело один перечислитель cxx со значением 0. Значение cpp sizeof(), применяемое к типу перечисления, объекту 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

2022-10-20T13:29:52+00:00