2010-05-26 5 views
12

Les tableaux, fonctions, pointeurs, références, classes, unions, énumérations et pointeurs vers les membres sont types composés.Pourquoi les enums sont-ils considérés comme des types composés?

Ma compréhension d'un type de composé est basée sur un ou plusieurs autres types. Par exemple, T[n], T* et T& sont tous basés sur T. Alors quel autre type (s) est une énumération basée?

Ou si ma compréhension des types de composés est incorrecte, de quoi s'agit-il exactement d'un type qui en fait un type composé? Est-ce que composé est simplement un synonyme de ?

+0

En C, le terme « dérivé de type » au lieu de « type composé » est utilisé à la place, et C énumérations ne sont pas des types dérivés. Cela me fait penser que "type composé" en C++ n'est pas seulement destiné à composer des types à un nouveau type, mais aussi des valeurs à un nouveau type. La description des énumérations donnée durcit les soupçons qui disent "énumérations, qui comprennent un ensemble de valeurs constantes nommées." –

+0

@Johannes enums en C et enums en C++ sont des bêtes assez différentes, n'est-ce pas? Par exemple, vous pouvez affecter des valeurs entières aux variables énumérées en C mais pas en C++. – fredoverflow

+0

correct mais dans les deux langues, ils définissent un type propre. Mais je suppose que j'interprète trop dans ces deux termes. "type composé" semble en fait se référer uniquement à l'action des types composés, et le type sous-jacent comme AndreyT dit pour enums est le type composé, il semble :) –

Répondre

12

En C++ les types enum sont types scalaires, mais ils sont en même temps des types composés car ils sont construits au-dessus de certains types intégraux fondamentaux. Dans le cas d'un tableau ou d'un pointeur, vous spécifiez explicitement le type "base", mais dans le cas d'une énumération, le type intégral spécifique sous-jacent est choisi implicitement et automatiquement par l'implémentation. Vous n'avez aucun contrôle manuel sur le type intégral sous-jacent, ce qui ne disqualifie toujours pas les types enum d'être composé dans la nature. Certains compilateurs (ainsi que la future norme C++ 0x C++) permettent à l'utilisateur de spécifier le type entier sous-jacent pour un type enum donné, ce qui rend plus évident qu'il s'agit en fait d'un type composé. Voir here pour des exemples comme

enum class Color : char { red, blue }; 
Questions connexes