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
是一个枚举类型,它包含了三个可能的值:RED
、GREEN
和 BLUE
。这些值默认从 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. 指定强类型枚举的底层类型
你可以为强类型枚举指定一个底层类型(如 int
、char
等)。
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;
总结
- 传统枚举:易于使用,但缺乏类型安全性。它们的值可以与其他整数值自由混合。
- 强类型枚举:提供更好的类型安全性,防止隐式类型转换。它们需要显式的作用域限定符来访问枚举成员。
根据你的具体需求(如对类型安全性的需求、与旧代码的兼容性等),你可以选择使用传统枚举或强类型枚举。