Несколько причин предпочесть перечисления с классом (scoped) обычным перечислениям в C++:
- Безопасность типов. 25 Скопированные перечисления не неявно преобразуются в целочисленные значения, что помогает предотвратить семантические ошибки. 1
- Избегание конфликтов имён. 12 В отличие от обычных перечислений, у скопированных перечислители размещаются только в области видимости перечисления, что уменьшает загрязнение глобального пространства имён и вероятность конфликтов имён при использовании в глобальной области видимости. 1
- Возможность указать базовый тип перечисления. 45 Для скопированных перечислений базовый тип по умолчанию определён в стандарте — int. 4
Таким образом, scoped перечисления решают большинство ограничений обычных перечислений: обеспечивают безопасность типов, чётко определяют базовый тип, решают проблемы с областью видимости и позволяют предварительно объявлять перечисления. 5