C++中enum的用法

47 阅读2分钟

C++ 中的 enum(枚举类型)用于定义一组命名的整型常量。C++ 提供了两种枚举类型:传统的枚举(C-style enum)和强类型枚举(C++11 引入的 enum class 或 enum struct)。

1. 传统的枚举(C-style enum)

传统的枚举是一种简单的枚举类型,它实质上是整型常量的集合。

enum Color {
    RED,
    GREEN,
    BLUE
};

Color myColor = RED;

在这个例子中,Color 是一个枚举类型,它包含了三个可能的值:REDGREENBLUE。这些值默认从 0 开始递增。

2. 指定枚举值

你可以为枚举的每个成员指定一个特定的整数值。

enum StatusCode {
    OK = 200,
    NotFound = 404,
    Error = 500
};

StatusCode code = NotFound;

在这里,StatusCode 枚举的每个成员都被赋予了一个特定的整数值。

3. 强类型枚举(enum class 或 enum struct)

C++11 引入了强类型枚举,这是一种更安全的枚举类型,它不会隐式转换为整数,也不允许从整数隐式转换。

enum class Direction {
    North,
    South,
    East,
    West
};

Direction heading = Direction::North;

在这个例子中,Direction 是一个强类型枚举,其成员必须使用 Direction:: 限定符来访问。

4. 指定强类型枚举的底层类型

你可以为强类型枚举指定一个底层类型(如 intchar 等)。

enum class StatusCode : char {
    OK = 'O',
    Error = 'E'
};

StatusCode status = StatusCode::OK;

这里,StatusCode 使用 char 作为底层类型。

5. 枚举的应用

枚举在表示一组固定的相关值时非常有用,如状态码、方向、选项等。

enum class Weekday {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};

Weekday today = Weekday::Friday;

总结

  • 传统枚举:易于使用,但缺乏类型安全性。它们的值可以与其他整数值自由混合。
  • 强类型枚举:提供更好的类型安全性,防止隐式类型转换。它们需要显式的作用域限定符来访问枚举成员。

根据你的具体需求(如对类型安全性的需求、与旧代码的兼容性等),你可以选择使用传统枚举或强类型枚举。