Conversions et les types énumérés
Étant donné que les types énumérés sont des types intégraux, tout énumérateur peut être converti en un autre type intégral par la promotion de type intégral.Considérez cet exemple :
// 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";
}
Sortie
i = 4
Toutefois, il n'existe aucune conversion implicite de n'importe quel type intégral en type énuméré.Par conséquent (reprenant l'exemple précédent), l'instruction suivante est dans l'erreur :
d = 6; // Erroneous attempt to set d to Saturday.
Les assignations comme celui-ci, où aucune conversion implicite n'existe, doivent utiliser un cast pour effectuer la conversion :
d = (Days)6; // Explicit cast-style conversion to type Days.
d = Days( 4 ); // Explicit function-style conversion to type Days.
L'exemple précédent décrit les conversions des valeurs qui coïncident avec les énumérateurs.Il n'existe aucun mécanisme qui vous protège de convertir une valeur qui ne pas coïncide avec un des énumérateurs.Par exemple :
d = Days( 967 );
Certains ces conversions peuvent s'exécuter.Toutefois, il n'y a aucune garantie que la valeur résultante sera l'un des énumérateurs.En outre, si la taille de l'énumérateur est trop petite pour contenir la valeur qui est convertie, ne pas être la valeur enregistrée peut ce que vous attendez.