www.digitalmars.com
Last update Wed May 31 17:11:57 2006

Enums - Tipos Enumerados

EnumDeclaration:
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
Enums são usados para definir um grupo de constantes inteiras relacionadas.

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 anonimo
Define as constantes A=0, B=1, C=2 de maneira equivalente a:
const int A = 0;
const int B = 1;
const int C = 2;
Visto que:
enum X { A, B, C } // enum nomeado
Define 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