CppCoreGuidelines Enum.3 用 enum class,而不要用普通枚举
01 February 2023
“Prefer class enums over “plain” enums”
理由
减少惊讶:传统枚举太容易转换成 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; // Clearly at least one of these calls is buggy. 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); // Error: cannot convert Web_color to int. Print_color(Product_info::red); // Error: cannot convert Product_info to int.
强化
- (简单)警告没有使用 class 的枚举定义