Enumerations
Enum.3
Предпочитайте `enum class` «обычным» `enum`
Причина
Чтобы избежать неожиданностей: традиционные перечисления слишком легко приводятся к int.
Пример
void Print_color(int color);
enum Web_color { red = 0xFF0000, green = 0x00FF00, blue = 0x0000FF };
enum Product_info { red = 0, purple = 1, blue = 2 };
Web_color webby = Web_color::blue;
// Очевидно, что хотя бы один из этих вызовов содержит ошибку.
Print_color(webby);
Print_color(Product_info::blue);
Вместо этого используйте enum class:
void Print_color(int color);
enum class Web_color { red = 0xFF0000, green = 0x00FF00, blue = 0x0000FF };
enum class Product_info { red = 0, purple = 1, blue = 2 };
Web_color webby = Web_color::blue;
Print_color(webby); // Ошибка: нельзя неявно преобразовать Web_color в int.
Print_color(Product_info::red); // Ошибка: нельзя неявно преобразовать Product_info в int.
Контроль
(Простой) Предупреждать о любом определении перечисления не через enum class.