Výčtové typy a převody
Výčtové typy jsou typy integrálů, všechny čítače výčtu lze převést na jiný typ nedílnou podle nedílnou propagace.Vezměme si jako příklad:
// 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";
}
Výsledek
i = 4
Je však žádná implicitní převod všech integrálního typu výčtového typu.Proto chyba (pokračovat v předchozím příkladu), je následující:
d = 6; // Erroneous attempt to set d to Saturday.
Přiřazení například, pokud neexistuje žádná implicitní převod, musíte použít osazení k provedení převodu:
d = (Days)6; // Explicit cast-style conversion to type Days.
d = Days( 4 ); // Explicit function-style conversion to type Days.
Předchozí příklad ukazuje převody hodnot, které se překrývají s výčtu.Neexistuje žádný mechanismus, který chrání před převod hodnoty, který se nekryje s jednou výčtu.Příklad:
d = Days( 967 );
Některé tyto převody mohou pracovat.Je však zaručit, že výsledná hodnota bude jeden čítače výčtů.Navíc pokud velikost čítače výčtu je příliš malá hodnota převáděna, uložená hodnota nemusí být očekávání.