Konvertierungen und Enumerationstypen
Da Enumerationstypen Ganzzahltypen sind, kann jeder Enumerator an einen anderen ganzzahligen Typ durch Erweiterung ganze Zahl konvertiert werden.Betrachten Sie das folgende Beispiel:
// 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";
}
Output
i = 4
Es gibt jedoch keine implizite Konvertierung von einem ganzzahligen Typ in einen Aufzählungstyp.Daher (fortfahrend mit dem vorhergehenden Beispiel), ist die folgende Anweisung im Fehler:
d = 6; // Erroneous attempt to set d to Saturday.
Zuweisungen wie folgt, wo keine implizite Konvertierung vorhanden ist, müssen Sie eine Umwandlung verwenden, um die Konvertierung auszuführen:
d = (Days)6; // Explicit cast-style conversion to type Days.
d = Days( 4 ); // Explicit function-style conversion to type Days.
Im vorhergehenden Beispiel veranschaulicht Konvertierungen von Werten, die mit den Enumeratoren entsprechen.Es gibt keinen Mechanismus, der Sie durch Konvertieren eines Werts schützt, der keinem der Enumeratoren entspricht.Beispiele:
d = Days( 967 );
Einige solche Konvertierungen zu arbeiten.Es gibt jedoch keine Garantie, dass der resultierende Wert einer der Enumeratoren ist.Auch wenn die Größe des Enumerators zu klein ist, den Wert enthält, der konvertiert wird, kann der gespeicherte Wert nicht, was Sie erwarten.