Udostępnij za pośrednictwem


Konwersje i typy wyliczane

Ponieważ typy wyliczane są integralną typy, każdy moduł wyliczający można konwertować na inny typ integralną przez promowanie integralną.Rozważmy następujący przykład:

// 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(pl-pl,VS.110).gifDane wyjściowe

i = 4

Jednakże istnieje niejawna konwersja z dowolnego typu integralną z typem wyliczeniowym.Dlatego (kontynuowaniem w poprzednim przykładzie), poniższa instrukcja jest błąd:

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

Przydziały, takie jak ten, w przypadku gdy istnieje niejawna konwersja, należy użyć rzutowania na przeprowadzenie konwersji:

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

Powyższy przykład pokazuje konwersji wartości, które pokrywają się z numeratorów.Nie istnieje mechanizm chroniący konwertowanie wartości, który nie pokrywa się z jednym z numeratorów.Na przykład:

d = Days( 967 );

Niektóre z takich konwersji może działać.Jednak nie ma żadnej gwarancji, że wartość wynikową będzie jednym z numeratorów.Ponadto jeśli rozmiar modułu wyliczającego jest zbyt mały, aby pomieścić wartości są konwertowane, wartość przechowywana nie może tego oczekujesz.

Zobacz też

Informacje

Deklaracje wyliczania C++