普通枚举可隐式转整数,enum class必须用static_cast显式转换,转换结果为成员对应整数值,推荐显式转换以确保类型安全和代码清晰。

在C++中,枚举类型(enum)本质上是整数类型的别名,因此可以直接转换为整数类型。这种转换是隐式的,也可以显式进行,具体取决于使用场景和需求。
1. 普通枚举转整数
对于传统的C风格枚举(非强类型),可以直接赋值给整型变量。
enum Color {
RED,
GREEN,
BLUE
};
Color c = GREEN;
int value = c; // 隐式转换:value = 1
这里 RED=0、GREEN=1、BLUE=2,所以转换结果就是对应的位置值。
2. 显式强制转换
虽然可以隐式转换,但为了代码清晰或避免警告,建议使用static_cast进行显式转换。
立即学习“C++免费学习笔记(深入)”;
enum Status {
PENDING,
SUCCESS,
FAILED
};
Status s = SUCCESS;
int statusValue = static_cast(s); // 推荐写法,明确意图
这种方式更安全,也便于调试和维护。
3. 枚举类(enum class)转整数
C++11引入的enum class具有更强的类型安全,默认不支持隐式转换,必须显式转换。
enum class Direction {
LEFT,
RIGHT,
UP,
DOWN
};
Direction d = Direction::UP;
int dirValue = static_cast(d); // 必须使用 static_cast
如果不加static_cast,编译会报错,因为 enum class 不允许隐式转为 int。
4. 自定义枚举值
枚举成员可以指定具体整数值,转换时取的是设定的值。
enum Priority {
LOW = 10,
MEDIUM = 20,
HIGH = 30
};
Priority p = HIGH;
int priValue = static_cast(p); // 结果为 30
这种写法适合需要映射特定数值的场景,比如协议编码、状态码等。
基本上就这些。普通 enum 可隐式转 int,enum class 必须用 static_cast。转换本身简单,关键是注意类型安全和语义清晰。











