Mediumenum

Можно ли перечислять enum class в цикле и как?

1Постановка

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

2Решение

Напрямую — нет, у enum class нет встроенного итерирования. Приходится приводить к int и проверять диапазон, либо использовать сторонние библиотеки.

enum class Dir { Up, Right, Down, Left, Count };

for (int i = 0; i < static_cast<int>(Dir::Count); ++i) {
    Dir d = static_cast<Dir>(i);
    handle(d);
}
  • Sentinel Dir::Count в конце удобен для цикла — значения должны быть плотно от 0 без дыр;
  • Альтернативы: библиотеки Magic Enum / Better Enums, operator++ для enum;
  • В C++23/26 обсуждается reflection, который даст перечисление автоматически.

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

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

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