Я столкнулся со следующей формой создания экземпляра переменной класса перечисления, и она компилируется без каких-либо предупреждений или ошибок в VS2012:
UINT32 id;
enum class X {apple, pear, orange};
X myX = X(id);
Кроме того, отправка X(id)
в качестве аргумента функции, ожидающей параметр типа X, также скомпилирована. Я не уверен, всегда ли результат правильный или это просто странное поведение компилятора.
Однако попытка сделать X myX(id);
вместо приведенного выше привела к ошибке компиляции:
ошибка C2440: «инициализация»: невозможно преобразовать «UINT32» в «X». Преобразование в тип перечисления требует явного приведения (static_cast, приведения в стиле C или приведения в стиле функций).
Чтение стандарта С++ 11 не помогло мне понять. Так вот у меня 2 вопроса на эту тему:
- Можно ли построить объект класса enum с целочисленным типом в качестве параметра?
- Если 1 верно, почему
X myX(id)
не работает?