C++ 枚举(传统枚举与枚举类)
枚举
在C++中,枚举(Enumeration)是一种用户定义的数据类型,它由一组命名的整数常量组成。枚举在C++中有几种不同的形式。
传统枚举(Unscoped Enum)
传统枚举(也称为未作用域枚举)定义如下:
enum Color {
RED,
GREEN,
BLUE
};
上述例子中,Color是枚举的类型名,RED、GREEN和BLUE是枚举的成员。默认情况下,枚举成员的值从0开始,并依次递增。
特点
- 枚举成员的作用域是全局的。
- 枚举成员可以隐式地转换为整型。
- 枚举成员可以不显式指定值,如果不指定,则从0开始依次递增。
作用域枚举(Scoped Enum)
C++ 11 引入了作用域枚举,定义如下:
enum class Color {
RED,
GREEN,
BLUE
};
// 或
enum struct Color {
RED,
GREEN,
BLUE
};
特点
- 枚举成员的作用域是枚举类型内部,必须通过枚举类型来访问。
- 枚举成员不能隐式转换为整型,必须显式转换。
- 提供了更好的类型安全。
使用枚举
- 传统枚举
enum Color {
RED,
GREEN,
BLUE
};
Color c = RED;
if (c == RED) {
// do something
}
- 作用域枚举
enum class Color {
RED,
GREEN,
BLUE
};
Color c = Color::RED;
if (c == Color::RED) {
// do something
}
显式指定枚举值
enum class Color {
RED = 1,
GREEN = 2,
BLUE = 4
};
也可以部分显式指定(未指定的部分会在前一个基础上加一)
enum class Color {
RED = 2,
GREEN = 4,
BLUE // BLUE = 5
};

浙公网安备 33010602011771号