relative alle migliori prassi:
quando non si dispone di un motivo particolare per la realizzazione del enum un tipo di byte, si dovrebbe lasciare come predefinito.
Ogni volta che si utilizza un enum in un'istruzione switch si dovrebbe avere una clausola "predefinita" per un valore enum non valido. Quindi non importa se stai verificando 256-NumRealEnumValues o 2^32-NumRealEnumValues. Entrambi avranno una clausola predefinita che gestisce tutti i casi non validi.
Un motivo per impostare esplicitamente il tipo di enumerazione è se si desidera che l'enumerazione corrisponda a un altro tipo nel programma e che sia necessario eseguire il cast esplicito tra di essi.
Cambiare il tipo al più piccolo non ti aiuterà nemmeno con i problemi di versione. A meno che tu non abbia esattamente la dimensione massima dell'enumerazione. Per problemi di versione, intendo quando si ha una DLL compilata che utilizza l'enumerazione, si aggiunge un nuovo valore enum, potrebbe essere eseguito codice che non era destinato alla clausola "predefinita" di un'istruzione switch.
in materia di efficienza:
No, non c'è alcun beneficio in termini di efficienza per renderlo un byte.
int è più efficiente da utilizzare poiché la cpu su x86 ha registri a 32 bit. La copia in un registro viene eseguita a 32 bit alla volta.
Quando si utilizza un tipo più piccolo, è necessario azzerare parte del registro e copiare nel resto dei bit di ordine inferiore del registro.
fonte
2009-03-16 00:04:18
Per essere chiari, stavo parlando delle migliori pratiche piuttosto che dell'ottimizzazione, anche se questa domanda si è presentata come una domanda di ottimizzazione. Il mio punto era proprio dal momento che puoi specificarlo, dovresti "sempre" specificare o dovresti o lasciare che il compilatore decidesse? – ghost