2010-09-01 4 views

risposta

22
  1. Un enum è solo un rvalore, non un lvalue. Non ha indirizzo
  2. Un enum può essere solo una costante di tempo di compilazione, non una costante di runtime.
  3. Le enumerazioni non aggiungono alcun rigonfiamento al file oggetto.
  4. I moduli compilano più velocemente e utilizzano meno memoria in fase di compilazione. Di solito è trascurabile, ma se stai facendo metaprogramming sufficientemente complicato può cominciare a importare.

In generale, per le cose che sono costanti in fase di compilazione in contrapposizione a runtime costanti, non c'è nessuno svantaggio di utilizzare un enum, e ha il vantaggio di rendere le vostre intenzioni assolutamente chiaro e di essere leggermente più efficiente.

Modifica: Un altro caso di utilizzo per enumerazione può essere disambiguante per il compilatore se una funzione deve essere valutata in fase di esecuzione o in fase di compilazione. Se il risultato di una funzione è assegnato a una variabile di stack immutable, la funzione verrà valutata in fase di esecuzione. Se si utilizza uno enum nello stesso ambito, il risultato verrà valutato al momento della compilazione.

4

IIRC in D enum A = B; è più o meno le stesse cose di #define A B è in C. È sempre sottotesso come un letterale in qualsiasi espressione che lo utilizza.