Создание экземпляра класса C ++ 11

Я столкнулся со следующей формой создания экземпляра переменной класса enum, и он компилируется без каких-либо предупреждений или ошибок в 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-style или функционального).

Чтение стандарта C ++ 11 не помогло мне понять.
Итак, у меня есть 2 вопроса на эту тему:

  1. Можно ли построить объект класса enum с целочисленным типом в качестве параметра?
  2. Если 1 верно, почему X myX(id) не работает?

4

Решение

Вы не создаете перечисление с этим синтаксисом. Вместо этого вы используете альтернативный явный синтаксис приведения из UINT32 в enum class X, Например, можно явно привести double к типу int следующим образом:

double p = 0.0;
int f = int(p)

Увидеть этот пост переполнения стека для всех различных синтаксисов приведения вы можете использовать в c ++.

Ваш код может быть эквивалентно написан с более распространенным синтаксисом приведения, например:

UINT32 id;
enum class X {apple, pear, orange};
X myX = (X)id;
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]