Enums - Tipos Enumerados
EnumDeclaration:Enums são usados para definir um grupo de constantes inteiras relacionadas.
enum Identifier EnumBody
enum EnumBody
enum Identifier : EnumBaseType EnumBody
enum : EnumBaseType EnumBody
EnumBaseType:
Type
EnumBody:
;
{ EnumMembers }
EnumMembers:
EnumMember
EnumMember ,
EnumMember , EnumMembers
EnumMember:
Identifier
Identifier = AssignExpression
Se o Identifier do enum está presente, os EnumMembers são declarados no escopo do Identifier do enum. O Identifier do enum declara um novo tipo.
Se o Identifier do enum não está presente, então o enum é um enum anonimo, e os EnumMembers são declarados no escopo onde EnumDeclaration está. Nenhum novo tipo é criado; os EnumMembers tem o tipo do EnumBaseType.
The EnumBaseType is the underlying type of the enum. It must be an integral type. If omitted, it defaults to int.
enum { A, B, C } // enum anonimoDefine as constantes A=0, B=1, C=2 de maneira equivalente a:
const int A = 0;Visto que:
const int B = 1;
const int C = 2;
enum X { A, B, C } // enum nomeadoDefine um novo tipo X que tem valores X.A=0, X.B=1, X.C=2
Membros de enum nomeado podem ser iplicitamente moldados para tipos inteiros, mas tipos inteiros não podem ser implicitamente moldados para um tipo enum.
Enums devem ter ao menos um membro.
Se uma Expressão é fornecida para um membro do enum, o valor do membro é ajustado para o resultado da Expressão. A Expressão deve ser solucionável em tempo de compilação. Membros do enum subseqüentes sem Expressão sãoajustados para o valor do membro anterior mais um:
enum { A, B = 5+7, C, D = 8, E }Ajusta A=0, B=12, C=13, D=8, e E=9.
Propriedades de Enum
.min Menor valor do enum
.max Maior valor do enum
.sizeof Tamanho do armazenamento para um valor enumerado
Por exemplo:
X.min é X.A
X.max é X.C
X.sizeof é o mesmo que int.sizeof
Inicialização de Enums
Na ausência de um inicializador explícito, uma variável enum é inicializada para o primeiro valor do enum.enum X { A=3, B, C }
X x; // x é inicializado para 3