72 votes

quelle est la taille d'une donnée de type enum en C++ ?

Il s'agit d'une question de test d'entretien C++ et non d'un devoir.

 #include <iostream>
using namespace std;
enum months_t { january, february, march, april, may, june, july, august, september,    
  october, november, december} y2k;

 int main ()
  {
    cout << "sizeof months_t is  " << sizeof(months_t) << endl;
    cout << "sizeof y2k is  " << sizeof(y2k) << endl;
    enum months_t1 { january, february, march, april, may, june, july, august,    
       september, october, november, december} y2k1;
    cout << "sizeof months_t1 is  " << sizeof(months_t1) << endl;
    cout << "sizeof y2k1 is  " << sizeof(y2k1) << endl;
 }

Sortir:

sizeof month_t est 4 la taille de y2k est de 4 sizeof month_t1 est 4 la taille de y2k1 est de 4

Pourquoi la taille de tous ces 4 octets ? Pas 12 x 4 = 48 octets ? Je sais que les éléments d'union occupent le même emplacement mémoire, mais il s'agit d'une énumération.

56voto

ObscureRobot Points 4336

La taille est de quatre octets car le enum est stocké en tant que int . Avec seulement 12 valeurs, vous n'avez vraiment besoin que de 4 bits, mais les machines 32 bits traitent des quantités 32 bits plus efficacement que des quantités plus petites.

 0 0 0 0  January
0 0 0 1  February
0 0 1 0  March
0 0 1 1  April
0 1 0 0  May
0 1 0 1  June
0 1 1 0  July
0 1 1 1  August
1 0 0 0  September
1 0 0 1  October
1 0 1 0  November
1 0 1 1  December
1 1 0 0  ** unused **
1 1 0 1  ** unused **
1 1 1 0  ** unused **
1 1 1 1  ** unused **

Sans énumérations, vous pourriez être tenté d'utiliser des entiers bruts pour représenter les mois. Cela fonctionnerait et serait efficace, mais cela rendrait votre code difficile à lire. Avec les énumérations, vous obtenez un stockage et une lisibilité efficaces.

7voto

agenttom Points 78

Une énumération est un peu comme un typedef pour le type int (en quelque sorte).

Ainsi, le type que vous avez défini là-bas a 12 valeurs possibles, cependant une seule variable n'a qu'une seule de ces valeurs.

Pensez-y de cette façon, lorsque vous définissez une énumération, vous définissez essentiellement une autre façon d'attribuer une valeur int.

Dans l'exemple que vous avez fourni, janvier est une autre façon de dire 0, février est une autre façon de dire 1, etc. jusqu'à décembre est une autre façon de dire 11.

4voto

Stuart Golodetz Points 12679

Parce qu'il s'agit de la taille d'une instance du type - les valeurs enum sont probablement stockées sous forme d'ints (32 bits / 4 octets) ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X