枚举

内容简介

枚举用于给一组相关的常量命名,让代码比直接写数字更易读。现代 C++ 优先使用 enum class,传统 enum 常见于 C 代码和旧 C++ 代码。

用法

C++ enum class

enum class Color {
    Red,
    Green,
    Blue
};
 
Color color = Color::Red;
int value = static_cast<int>(color);

传统 enum

enum Status {
    STATUS_OK,
    STATUS_ERROR,
    STATUS_NOT_FOUND
};
 
enum Status status = STATUS_OK;

默认从 0 开始递增,也可以手动指定:

enum Week {
    MON = 1,
    TUE,
    WED
};

最佳代码实践

  • 新 C++ 代码优先使用 enum class,避免命名冲突和隐式转换。
  • 枚举值命名要表达业务含义,不要只写 ABC
  • 和 C 接口交互、做位掩码时,传统 enum 仍然常见。

错误用法

enum Status { OK, ERROR };
enum Result { OK, FAILED };  // 错误:传统 enum 的枚举名容易污染外层作用域
enum class Status { OK, ERROR };
int status = Status::OK;  // 错误:enum class 不能隐式转 int

注意事项

  • 枚举不等于字符串,不能直接输出枚举名称。
  • 需要遍历枚举时,可以添加 COUNT 作为数量哨兵,但要避免把它当成真实业务值。

学习路径