Преобразования и перечислимые типы
Так как перечислимые типы целочисленные типы, любой перечислитель можно преобразовать в другой целочисленный тип промотированием слияния.Рассмотрим следующий пример.
// 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
Однако неявного преобразования из любого объединенного типа в перечисляемый тип.Поэтому (продолжающ с предыдущим примером), следующий оператор в ошибке:
d = 6; // Erroneous attempt to set d to Saturday.
Назначения, как это, где неявного преобразования не существует, необходимо использовать приведение для выполнения преобразования.
d = (Days)6; // Explicit cast-style conversion to type Days.
d = Days( 4 ); // Explicit function-style conversion to type Days.
В предыдущем примере показан преобразования значений, которые совпадают с перечислителями.Отсутствует механизм, который защищает от преобразования значения, которые не совпадает с одним из перечислителей.Примеры.
d = Days( 967 );
Некоторые такие преобразования могут работать.Однако нет никаких гарантий того, что возникающее значение будет одним из перечислителей.Кроме того, если размер перечислителя слишком мал для хранения, преобразовать значение хранится значение, которое не может быть которого ожидается.