2010-07-12 10 views
8

Esiste un numero massimo di elementi consentiti enum in C++?limite elemento enum

(questione è stata sollevata dalla risposta alla mia precedente interrogazione sulla defines)

+7

IMO, se hai bisogno di chiedere, è meglio rivedere il tuo design; ma penso che potrebbe essere correlato alla dimensione di un "int". M. – Max

+0

@Max: C'è una base per pensare che? Specificare tutti gli elementi con nome in un enum è meglio che distribuirlo su più file per il bene di compatibilità –

+0

Che compilatore stai usando? Il numero di valori consentiti in un 'enum 'varia da implementazione a implementazione. – bta

risposta

11

Non c'è nessun massimo o minimo indicato, dipende dalla vostra applicazione. Tuttavia, si noti che l'allegato B recita:

- Costanti di enumerazione in una singola enumerazione [4096].

Come raccomandazione. Ma questa è strettamente una raccomandazione, non un requisito.

+3

Crap, ho davvero bisogno del membro 4294967297th !! – Skurmedel

+0

O consentire meno perché il compilatore si arresta in modo anomalo perché non ha RAM sufficiente per conservare tutti questi simboli in memoria :-) – jdehaan

+3

Ovviamente, se l'enumeratore 4.294.967.297 viene dichiarato come 'nome = 0', è possibile continuare, gli enumeratori solo non ho più valori univoci :-P –

4

La lingua non specifica alcuna cosa del genere. Tuttavia, i compilatori possono avere limiti. Dovresti controllare i tuoi documenti del compilatore per quello.

1

Nel caso di C un enum è solo un set migliore di #define s. Qualsiasi cosa significa in dettaglio dalla norma C: un valore di enumerazione è di un tipo

che è compatibile con un implementazione definita una delle tipi integrali.

La mia ipotesi è che il C++ ha una definizione simile e C++ 0x aggiunge qualche possibilità di battitura. Tutto in uno che significherebbe la quantità che si può avere di loro è teoricamente limitata dal tipo sottostante (qualunque sia lo int la maggior parte delle volte, suppongo, lo standard C non sia abbastanza chiaro riguardo a questo). Ma prima di poter impostare milioni di simboli il tuo compilatore si bloccherà o probabilmente esaurirà la memoria.