2010-07-12 14 views
8

¿Hay una cantidad máxima de elementos enum permitidos en C++?límite del elemento enum

(planteó la cuestión de la respuesta a mi pregunta anterior sobre defines)

+7

IMO, si necesita preguntar, es mejor que revise su diseño; pero creo que podría estar relacionado con el tamaño de un "int". M. – Max

+0

@Max: ¿Hay alguna base para pensar eso? Especificar todos los elementos nombrados en una enumeración es mejor que distribuirlo en varios archivos para mantener el estado. –

+0

¿Qué compilador está utilizando? El número de valores permitidos en un 'enum' varía de la implementación a la implementación. – bta

Respuesta

11

No hay ningún máximo o mínimo especificado, que depende de su aplicación. Sin embargo, tenga en cuenta que el anexo B establece:

- Constantes de enumeración en una sola enumeración [4096].

Como recomendación. Pero esto es estrictamente una recomendación, no un requisito.

+3

Mierda, realmente necesito ese miembro 4294967297th !! – Skurmedel

+0

O permita menos porque el compilador se cuelga porque no tiene suficiente memoria RAM para mantener todos estos símbolos en la memoria :-) – jdehaan

+3

Por supuesto, si el enumerador 4,294,967,297th se declara como 'name = 0', podría continuar, los enumeradores simplemente ya no tiene valores únicos :-P –

4

El idioma no especifica nada. Sin embargo, los compiladores pueden tener límites. Tendría que comprobar sus documentos de compilación para eso.

1

En el caso de C an enum es simplemente un conjunto con mejor ámbito de #define s. Cualquiera que sea que eso significa en detalle de la C estándar: un valor de enumeración es de un tipo

que es compatible con un definido por la implementación uno de los tipos integrales.

Supongo que C++ tiene una definición similar y C++ 0x agrega alguna posibilidad de escritura. Todo en uno que significaría que la cantidad que puede tener de ellos está limitada teóricamente por el tipo subyacente (lo que sea? int la mayoría de las veces, supongo, el estándar C no es lo suficientemente claro con respecto a esto). Pero antes de que pueda configurar millones de símbolos, su compilador se bloqueará o probablemente se quedará sin memoria.

Cuestiones relacionadas