c++ - crear - ¿Valor por defecto variable de Enum?
struct union enum (2)
El programa tiene un comportamiento indefinido . El valor de enummy es indeterminado. Conceptualmente, no hay diferencia entre su código y el siguiente código:
int main() {
int i; //indeterminate value
std::cout << i; //undefined behavior
};
Si hubiera definido su variable en el ámbito del espacio de nombres, se inicializaría el valor en 0.
enum SomeEnum {
EValue1 = 1,
EValue2 = 4,
};
SomeEnum e; // e is 0
int i; // i is 0
int main()
{
cout << e << " " << i; //prints 0 0
}
No se sorprenda de que e
pueda tener valores diferentes de cualquiera de los valores enumeradores de SomeEnum
. Cada tipo de enumeración tiene un tipo integral subyacente (como int
, short
o long
) y el conjunto de valores posibles de un objeto de ese tipo de enumeración es el conjunto de valores que tiene el tipo integral subyacente. Enum es solo una forma de nombrar convenientemente algunos de los valores y crear un nuevo tipo, pero no restringe los valores de su enumeración por el conjunto de valores de los enumeradores.
Actualización: algunas citas que me respaldan:
Inicializar a cero un objeto de tipo T significa:
- si T es un tipo escalar (3.9), el objeto se establece en el valor de 0 (cero) convertido a T;
Tenga en cuenta que las enumeraciones son tipos escalares.
Valorizar-inicializar un objeto de tipo T significa:
- si T es un tipo de clase bla, bla
- si T es una clase no sindicalizada tipo blah blah
- si T es un tipo de matriz, entonces blah blah - de lo contrario, el objeto se inicializa en cero
Entonces, entramos en otra parte. Y los objetos de ámbito de espacio de nombres son inicializados por valor
La pregunta es simple:
#include <iostream>
enum SomeEnum {
EValue1 = 1,
EValue2 = 4
};
int main() {
SomeEnum enummy;
std::cout << (int)enummy;
}
¿Cuál será la salida?
Nota: Esto no es una entrevista, este es un código heredado de desarrolladores anteriores. El operador de transmisión aquí es solo por ejemplo, el código heredado real no lo tiene.
La salida será indeterminada. las variables de miembros enummy solo pueden ser 1 o 4.