- Un enum è solo un rvalore, non un lvalue. Non ha indirizzo
- Un enum può essere solo una costante di tempo di compilazione, non una costante di runtime.
- Le enumerazioni non aggiungono alcun rigonfiamento al file oggetto.
- 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.