在 C++ 中,枚举(enum
)是一种用于定义一组命名整型常量的数据类型。枚举有助于提高代码的可读性和可维护性。C++ 支持两种主要的枚举类型:传统枚举和强类型枚举(也称为“范围枚举”)。
传统枚举
传统枚举的语法如下:
enum Color {
RED, // 默认值为 0
GREEN, // 默认值为 1
BLUE // 默认值为 2
};
重点,可使用遍历
int c = Color::RED; //RED默认值为0,所以这里c=0;
for(int c = Color::RED + 1; c <Color::BLUE ; c++)
{
cout<<c; //输出1,2
}
可使用强制转换:
(Color)c ; //又将int类型的C转为了Color枚举类型
在这个例子中,Color
是一个枚举类型,它有三个值:RED
、GREEN
和 BLUE
。默认情况下,枚举值从 0 开始递增,但你也可以指定自定义值:
enum Color {
RED = 1,
GREEN = 2,
BLUE = 4
};
这样设置后,使用强制转换,就需要值对应。
比如: int c = 0; (Color)c强转就得不到RED,因为此时RED我们设置的值为1
强类型枚举(C++11 及以上)
强类型枚举(enum class
)引入于 C++11,提供了更强的类型安全性和更好的作用域控制。其语法如下:
enum class Color {
RED,
GREEN,
BLUE
};
与传统枚举不同,enum class
枚举类型的值不与全局命名空间中的其他标识符发生冲突。访问枚举值需要使用作用域运算符:
Color myColor = Color::RED;
强类型枚举还允许指定底层类型,默认是 int
:
enum class Color : unsigned int {
RED,
GREEN,
BLUE
};
枚举的操作
-
传统枚举 可以直接与整数进行比较或赋值:
Color color = RED; if (color == 1) { // do something }
-
强类型枚举 不能直接与整数进行比较,需要显式转换:
Color color = Color::RED; if (static_cast<int>(color) == 1) { // do something }
使用枚举可以使代码更加清晰、易于理解,尤其是在需要处理一组相关的常量值时。