Avant de déclarer les choses en C++ est très utile, car elle accélère considérablement le temps de compilation. Vous pouvez déclarer avant plusieurs choses en C++ dont: struct
, class
, function
, etc...
Mais pouvez-vous déclarer avant l' enum
en C++?
Non, vous ne pouvez pas.
Mais pourquoi ne pas l'autoriser? S'il lui est permis, vous pouvez définir votre enum
type dans votre fichier d'en-tête, et votre enum
valeurs dans votre fichier source. Sonne comme il devrait être autorisée à droite?
Mal.
En C++ il n'y a pas de type par défaut pour enum
comme il est en C# (int). En C++, votre enum
type sera déterminé par le compilateur pour être n'importe quel type qui s'adapte à la gamme de valeurs que vous avez pour votre enum
.
Qu'est-ce que cela signifie?
Cela signifie que votre enum
's sous-jacents ne peuvent pas être entièrement déterminé jusqu'à ce que vous avez toutes les valeurs de l' enum
défini. Qui mans vous ne pouvez pas séparer la déclaration et la définition de votre enum
. Et, par conséquent, vous ne pouvez pas déclarer avant l' enum
en C++.
Le standard ISO C++ S7.2.5:
Le type sous-jacent d'une énumération est un type intégral qui peut représenter toutes les énumérateur des valeurs définies dans l'énumération. Elle est mise en œuvre défini le type intégral est utilisé comme le type sous-jacent pour une énumération, sauf que le type sous-jacent ne doit pas être plus grand que int
moins que la valeur d'un agent recenseur ne peut pas s'insérer dans un int
ou unsigned int
. Si l'agent recenseur, la liste est vide, le type sous-jacent est comme si l'énumération n'avaient qu'un seul agent recenseur avec la valeur 0. La valeur de sizeof()
appliqué à un type d'énumération, un objet de type énumération, ou un agent recenseur, est la valeur de sizeof()
appliqué pour le type sous-jacent.
Vous pouvez déterminer la taille d'un type énuméré en C++ à l'aide de la sizeof
de l'opérateur. La taille du type énuméré est la taille de son type sous-jacent. De cette façon, vous pouvez deviner quel type de votre compilateur est à l'aide de votre enum
.
Si vous spécifiez le type de votre enum
explicitement comme ceci:
enum Color : char { Red=0, Green=1, Blue=2};
assert(sizeof Color == 1);
Vous pouvez ensuite déclarer avant votre enum
?
Pas de. Mais pourquoi pas?
En précisant le type d' enum
n'est pas réellement partie de la norme C++. C'est un VC++ extension. Il fera partie de C++0x.
Source