2010-05-26 22 views
12

matrices, funciones, punteros, referencias, clases, sindicatos, enumeraciones y punteros a miembros son tipos compuestos .¿Por qué las enumeraciones se consideran tipos compuestos?

Mi comprensión de un tipo de compuesto es que se basa en otro tipo (s). Por ejemplo, T[n], T* y T& se basan en T. Entonces, ¿en qué otro (s) tipo (s) se basa una enumeración?

O si mi comprensión de los tipos de compuesto no es correcta, ¿qué es exactamente acerca de un tipo que hace que sea un tipo de compuesto? Es compuesto simplemente un sinónimo de definida por el usuario?

+0

En C, el término "tipo derivado" en lugar de "tipo compuesto" se usa en su lugar, y en C enums no son tipos derivados. Esto me hace pensar que el "tipo compuesto" en C++ no solo está destinado a los tipos compuestos para un nuevo tipo, sino también a un nuevo tipo de valores. La descripción de las enumeraciones dadas endurece las sospechas que dicen "enumeraciones, que comprenden un conjunto de valores constantes nombrados". –

+0

@Johannes enumeraciones en C y C++ en las enumeraciones son bastante diferentes bestias, ¿verdad? Por ejemplo, puede asignar valores integrales a variables enum en C pero no en C++. – fredoverflow

+0

correcto, pero no obstante, en ambos idiomas definen un tipo propio. Pero supongo que estoy interpretando demasiado en estos dos términos. "tipo compuesto" de hecho parece referirse solo a la acción de los tipos compuestos, y el tipo subyacente como AndreyT dice que para enums es el tipo compuesto, parece :) –

Respuesta

12

En C++ los tipos enum son escalares, pero al mismo tiempo son tipos compuestos ya que se construyen sobre algún tipo integral fundamental. En el caso de una matriz o puntero, especifique explícitamente el tipo "base", pero en el caso de una enumeración, la implementación elige implícita y automáticamente el tipo integral subyacente específico. No tiene control manual sobre el tipo integral subyacente, que aún no descalifica a los tipos enum para que no sean de naturaleza compuesta.

Algunos compiladores (así como el futuro estándar C++ C++ 0x) permiten al usuario especificar el tipo entero subyacente para un tipo de enumeración dado, lo que hace más obvio que de hecho es un tipo compuesto. Consulte here para ejemplos como

enum class Color : char { red, blue }; 
Cuestiones relacionadas