Mediumenum

Что такое перечисление (enum) и чем enum class отличается от обычного enum?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Обычный `enum` (C-style) вводит имена в enclosing scope и неявно приводится к int. `enum class` (C++11, scoped enum) — строго типизирован: имена внутри Color::, не приводится к int неявно.

// Обычный enum: коллизии имён, неявное приведение
enum Color { RED, GREEN };
int x = RED;             // OK (проблема: неожиданное приведение)

// enum class: строго типизирован
enum class Color2 { Red, Green };
Color2 c = Color2::Red;  // нужно Color2::
// int y = c;           // ОШИБКА: нет неявного приведения

enum class можно параметризовать базовым типом: enum class Color : uint8_t { ... }. Это выбор по умолчанию в новом коде.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.