C++ 中的枚举类
枚举,或 C++ 中的枚举,是由一组命名的整数常量组成的用户定义数据类型。然而,传统的枚举类型存在潜在的名称冲突和缺乏类型安全性的缺点。
为了解决这个问题,C++ 引入了枚举类的概念,也称为作用域枚举。
声明枚举类
以下是声明枚举类的语法,使用作用域枚举(枚举类)即可实现。
enum class EnumName {
Value1,
Value2,
Value3,
// ... other enumerator values.
};
这里的 EnumName 是枚举类的名称。
Value1, Value2.. 是枚举类中的命名值(常量)。
从枚举类访问值
您可以使用作用域解析运算符 (::) 和枚举类名称来访问枚举类的值。请参考以下语法:
EnumName::Value
这里的 EnumName 是枚举类的名称。 值是类中定义的枚举器之一。
枚举类示例
以下是 C++ 中枚举类的示例。
#include <iostream>
using namespace std;
// 声明一个用于表示星期几的枚举类
enum class Day {
Monday, // 0
Tuesday, // 1
Wednesday, // 2
Thursday, // 3
Friday, // 4
Saturday, // 5
Sunday // 6
};
int main() {
Day today = Day::Friday;
if (today == Day::Friday) {
cout << "Today is Friday!" << endl;
}
return 0;
}
输出
Today is Friday!
说明
- 首先,我们声明了一个名为 Day 的枚举类,并指定了它们的值。
- 然后将变量 today 设置为 Day::Friday,然后将其与 Day::Friday 进行比较以打印一条消息。
枚举类的底层类型
枚举类使用整数作为其默认底层类型,但其他许多底层类型也是可能的:unsigned int、char、uint8_t、int16_t 等。
枚举类的默认底层类型
如果声明枚举类时未指定任何底层类型,则默认将其设置为 int。这意味着每个枚举器的值将存储为 int(4 字节)。
正如我们在上面的示例中所见。
为枚举类指定自定义底层类型
在这里,您可以通过在枚举类名称后添加冒号 (:) 来明确指定枚举类的底层类型。这将允许控制值的存储大小和范围。
语法
其语法如下。
enum class EnumName : UnderlyingType {
Value1,
Value2,
Value3
};
此处,UnderlyingType 可以是任何整数类型(例如 unsigned int、char、uint8_t 等)。
枚举类的底层类型示例
以下示例使用 unsigned int 作为底层类型。
#include <iostream>
using namespace std;
enum class Status : unsigned int {
Ok = 0, // 0
Error = 1, // 1
Warning = 2 // 2
};
int main() {
Status s = Status::Error;
// 打印枚举的整数值
cout << "The integer value of Error is: " << static_cast<unsigned int>(s) << endl;
return 0;
}
输出
The integer value of Error is: 1

