Condividi tramite


Conversioni e i tipi enumerati

Poiché i tipi enumerati sono tipi integrali, un enumeratore può essere convertito in un altro tipo integrale dalla promozione integrali.Si consideri l'esempio seguente:

// 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(it-it,VS.110).gifOutput

i = 4

Tuttavia, non esiste conversione implicita da qualsiasi tipo integrale a un tipo enumerato.Di conseguenza (continuando con l'esempio precedente), l'istruzione seguente è per errore:

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

Le assegnazioni come questo, in cui nessuna conversione implicita esiste, deve utilizzare un cast per eseguire la conversione:

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

Nell'esempio precedente viene illustrato le conversioni dei valori che coincidono con gli enumeratori.Non esiste alcun meccanismo che si protegge da convertire un valore che non coincide con uno degli enumeratori.Di seguito è riportato un esempio:

d = Days( 967 );

Alcune tali conversioni possono essere eseguiti.Tuttavia, non è garantito che il valore risultante sarà uno degli enumeratori.Inoltre, se la dimensione dell'enumeratore è troppo piccola per utilizzare il valore convertito, il valore archiviato non può essere quello previsto.

Vedere anche

Riferimenti

Dichiarazioni di enumerazione C++