Declaración de enumeración
De cppreference.com
Una enumeración es un tipo distinto cuyo valor está restringido a un rango de valores (véase más abajo para más detalles), que puede incluir varias constantes nombradas explícitamente ("enumeradores"). Los valores de las constantes son valores de un tipo integral conocido como el tipo subyacente de la enumeración.
Una enumeración se define utilizando la siguiente sintaxis:
clave-de-enum atrib(opcional) nombre-de-enum(opcional) base-de-enum(opcional)(C++11) { lista-de-enumeradores(opcional) }
|
(1) | ||||||||
clave-de-enum atrib(opcional) nombre-de-enum base-de-enum(opcional) ;
|
(2) | (desde C++11) | |||||||
1) El especificador-enum, que aparece en la sec-decl-especificadores de la sintaxis de declaración: define el tipo enumeración y sus enumeradores.
2) Declaración de enumeración opaca: define el tipo enumeración pero no sus enumeradores: después de esta declaración, el tipo es un tipo completo y se conoce su tamaño. Nota: una declaración de especialización explícita de un miembro de una enumeración con ámbito de una plantilla de clase es el único caso donde el especificador de nombre anidado aparece antes del nombre-de-enum (desde C++14)
| clave-de-enum | - | Uno de enum, enum class(desde C++11), o enum struct(desde C++11)
|
| atrib(C++11) | - | Secuencia opcional de cualquier número de atributos |
| nombre-de-enum | - | El nombre de la enumeración que se declara. Si está presente, y si esta declaración es una nueva declaración, puede estar precedida por el especificador de nombre anidado(desde C++11): secuencia de nombres y operadores de resolución de ámbito ::, que termina con el operador de resolución de ámbito. El nombre solo se puede omitir en las declaraciones de enumeración sin ámbito.
|
| base-de-enum(C++11) | - | Dos puntos (:), seguido de una sec-especificadores-de-tipo que denominan un tipo entero (si está calificado-cv, se ignoran las calificaciones) que servirá como el tipo subyacente fijo para este tipo enumeración
|
| lista-de-enumeradores | - | Lista de definiciones de enumeradores separadas por comas, cada una de las cuales es simplemente un identificador, que se convierte en el nombre del enumerador, o un identificador con un inicializador: identificador = constexpr. En cualquier caso, el identificador puede estar seguido directamente por una secuencia de especificadores de atributos. (desde C++17)
|
Hay dos tipos distintos de enumeraciones: enumeración sin ámbito (declarada con la clave-de-enum enum) y enumeración con ámbito (declarada con la clave-de-enum enum class o enum struct).