Mi sembra che molti, se non la maggior parte, i compilatori trattino tipi enumerati come int
sotto. In C / gcc, enum
s viene compilato a int
. In C # / Visual C #, puoi cambiare il tipo di dati sottostante con qualcosa di simile:
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
ma il valore predefinito è int
(secondo paragrafo) se non si modifica il tipo.
Per ovvi motivi, int
s è efficiente. Vanno attraverso l'ALU con facilità ed evitano inutili confronti tra stringhe.
A prima vista, non sembra che i linguaggi interpretati abbiano tipi enumerati incorporati (Ruby, Perl, JavaScript, altri sono sicuro). Possono essere emulati però; Ad esempio in JavaScript .
Le mie domande:
- Perché (apparentemente) la maggior parte dei compilatori usa
int
come tipo sottostante? Il motivo storico / prestazioni è correlato? - Ci sono linguaggi che compilano tipi enumerati con qualcosa di diverso da
int
(obyte
,long
, tipi numerici ...)? Se è così, perché hanno scelto di farlo in modo diverso?