Compartilhar via


Conversões e tipos enumerados

Como os tipos enumerados são tipos integrais, qualquer enumerador pode ser convertido em outro tipo integral para promoção integral.Considere este exemplo:

// 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(pt-br,VS.110).gifSaída

i = 4

No entanto, não há nenhuma conversão implícita de qualquer tipo integral para um tipo enumerado.Portanto (continuando com o exemplo anterior), a instrução a seguir seja um erro:

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

Atribuições como esta, onde nenhuma conversão implícita existe, devem usar a projeção para executar a conversão:

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

O exemplo anterior mostra as conversões de valores que coincidem com os enumeradores.Não há nenhum mecanismo que protege você de converter um valor que não coincide com um dos enumeradores.Por exemplo:

d = Days( 967 );

Algumas dessas conversões podem funcionar.No entanto, não há nenhuma garantia que o valor resultante será um dos enumeradores.Além disso, se o tamanho do enumerador é muito pequeno para conter o valor que está sendo convertido, o valor armazenado pode não ser o que você espera.

Consulte também

Referência

Declarações de enumeração de C++