本文主要介绍C/C++语言中枚举类型(enum)。
1. 概述
1.1 what
枚举类型(enumeration)是C++语言的一种派生数据类型,它是由用户定义的若干枚举常量组成的集合。
如果一个变量只有几种可能的值,那么可以将其定义为枚举类型。所谓“枚举”,是指将变量的值一一列举出来,变量只能在列举出来的值的范围内进行取值。
1.2 how
使用关键字 enum 创建枚举类型。枚举类型的一般形式如下:
enum 枚举名 { 标识符[ = 整型常数], 标识符[ = 整型常数], ... 标识符[ = 整型常数] } 枚举变量;
说明:
- 这里需要注意枚举类型的定义形式:每一行枚举常量末尾以逗号“,”结尾;最后一行没有标点符号;
- 通常,在我们使用 enum 类型时,都会为定义的枚举类型设置一个保留位,便于后续对该枚举类型进行扩展,这个保留位通常会由最后一个枚举常量充当;
- 在没有进行初始化(即省掉“=整型常数”)时,枚举类型中的一个标识符的值为 0 。
2. 示例代码
这里有一个简单的枚举类型的示例代码(enum_reserved.cpp):
#include <iostream> using namespace std; enum eDemoEnum { some1, some2, some3, some4, somen = (int)(((unsigned int)(-1))/2) }; int main() { int nMaxInt = (unsigned int)(-1); int nReserved = (int)(((unsigned int)(-1))/2); cout << "some1 is: " << some1 << endl; cout << "some2 is: " << some2 << endl; cout << "somen is: " << somen << endl; cout << "(unsigned int)(-1) is: " << (unsigned int)(-1) << endl; cout << "nMaxInt is: " << nMaxInt << endl; cout << "nReserved is: " << nReserved << endl; return 0; }
编译并运行上述代码,结果如下:
通过上述示例我们可以知道:
- 枚举类型中的枚举常量,默认情况下从 0 开始计数;而后面的枚举常量的值依次递增;
- “(unsigned int)(-1)”取值为 4294967295(232-1),但是如果将其直接赋值给 int 类型的变量时,其会转换为 int 类型的值 -1 。而在使用“(unsigned int)(-1)”进行运算(如本例中的除法)后,再进行 int 类型转换,就没有问题了。所以,我们平时在使用类型转换时,需要特别注意这些细节;
- 本例中我们使用“(int)(((unsigned int)(-1))/2)”的值对应的枚举常量 somen 作为枚举类型 eDemoEnum 的保留位。