Esta es una pregunta de prueba de entrevista C++ no deberes.¿cuál es el tamaño de un tipo de datos enum en C++?
#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;
}
Salida:
months_t sizeof es 4
sizeof Y2K es 4
sizeof months_t1 es 4
sizeof y2k1 es 4
¿Por qué es el tamaño de todos estos 4 bytes? ¿No es 12 x 4 = 48 bytes?
Sé que los elementos de unión ocupan la misma ubicación de memoria, pero esta es una enumeración.
¿Cómo nadie mencionó las clases enum? Espero que los entusiastas de C++ vayan más allá del deber en una pregunta como esta. –
Desconfundir el OP es la primera orden del día. Sin embargo, no hay nada que te impida pesar en las clases enum. – ObscureRobot
@MattJoiner ¿Quiere decir que en C++ 11 puede especificar el _ tipo subyacente_ de una enumeración, que es el tipo integral que imita? Por ejemplo 'enum month: char {january, ...};'. Las enumeraciones de clase, también conocidas como enums delimitados, son otra variedad de clases que crean un espacio de nombres adjunto para sus constantes. El problema es que las enumeraciones de clase son siempre de un tipo subyacente fijo ('int' si no se especifica). – rodrigo