Compartir a través de


Conversiones y los tipos enumerados

Dado que los tipos enumerados son tipos enteros, cualquier enumerador puede convertirse a otro tipo entero por promoción entera.Considere este ejemplo:

// enumerated_types.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

enum Days
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};

int  i;
Days d = Thursday;
int main()
{
   i = d;    // Converted by integral promotion.
   cout << "i = " << i << "\n";
}

bd77ckhw.collapse_all(es-es,VS.110).gifOutput

i = 4

Sin embargo, no hay ninguna conversión implícita de ningún tipo entero en un tipo enumerado.Por consiguiente (continuando con el ejemplo anterior), la instrucción siguiente está en error:

d = 6;    // Erroneous attempt to set d to Saturday.

Las asignaciones como este, que no existe ninguna conversión implícita, deben utilizar una conversión para realizar la conversión:

d = (Days)6;    // Explicit cast-style conversion to type Days.
d = Days( 4 );  // Explicit function-style conversion to type Days.

El ejemplo anterior muestra conversiones de valores que coinciden con los enumeradores.No hay ningún mecanismo que constituye de convertir un valor que no coincide con uno de los enumeradores.Por ejemplo:

d = Days( 967 );

Algunas estas conversiones pueden trabajar.Sin embargo, no hay garantías de que el valor resultante será uno de los enumeradores.Además, si el tamaño del enumerador es demasiado pequeño para contener el valor que se convierte, el valor almacenado puede no ser la esperada.

Vea también

Referencia

Declaraciones de enumeración de C++