Разница между перечислениями с областью видимости и без заключается в том, что переменные перечислений с областью видимости не могут неявно преобразовываться в целочисленные переменные и обратно. 4 Для такого преобразования следует использовать static_cast(). 4
Перечисления без области видимости позволяют использовать их значения глобально, что может приводить к путанице и конфликтам имён при использовании в разных областях видимости. 6
Перечисления с областью видимости ограничивают значения определённой областью, инкапсулируя их и предотвращая конфликты имён. 6 Доступ к значениям такого перечисления возможен только через имя типа перечисления (например, Color::RED, Color::GREEN, Color::BLUE). 6
Таким образом, основное преимущество перечислений с областью видимости — возможность объявлять в классе перечисления, члены которых имеют одинаковые имена, и больший контроль над кодом, хотя и с рядом ограничений. 4