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