Pergunta

Por que os fobos usa enum Para definir constantes? Por exemplo, em std.math:

enum real E = 2.7182818284590452354L;

Por que não usar um global immutable? Quais são as vantagens/desvantagens de enum sobre immutable?

Foi útil?

Solução

  1. Uma enumeração é apenas um Rvalue, não um LValue. Não tem endereço.
  2. Uma enumeração pode ser apenas uma constante de tempo de compilação, não uma constante de tempo de execução.
  3. Enums não adicionam nenhum inchaço ao arquivo de objeto.
  4. As enumes compilam mais rapidamente e usam menos memória no momento da compilação. Geralmente é insignificante, mas se você estiver fazendo metaprogramação suficientemente complicado, isso pode começar a ser importante.

Em geral, para coisas que são constantes de tempo de compilação em oposição às constantes de tempo de execução, não há desvantagem no uso de uma enumeração e tem as vantagens de tornar suas intenções absolutamente claras e ser marginalmente mais eficientes.

Editar: um outro caso de uso para enumes pode estar desambiguar para o compilador se uma função deve ser avaliada em tempo de execução ou tempo de compilação. Se o resultado de uma função for atribuído a um immutable Variável de pilha, a função será avaliada em tempo de execução. Se você usar um enum No mesmo escopo, o resultado será avaliado no momento da compilação.

Outras dicas

Iirc em d enum A = B; é mais ou menos as mesmas coisas que #define A B está em C. É sempre subado como literal em qualquer expressão que a use.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top