本文主要介绍C/C++编程语言中枚举类型(enum)的相关知识,同时通过示例代码介绍枚举类型的使用方法。
1 概述
1.1 What
枚举类型(enumerations)是C/C++编程语言的一种派生数据类型,它是由用户定义的若干枚举常量组成的集合。
如果一个变量只有几种可能的值,那么可以将其定义为枚举类型。所谓“枚举”,是指将变量的值一一列举出来,变量只能在列举出来的枚举值范围内进行取值。
1.2 How
使用关键字 enum 创建枚举类型。枚举类型的一般用法如下:
enum 枚举名
{
标识符[ = 整型常数],
标识符[ = 整型常数],
...
标识符[ = 整型常数]
} 枚举变量;
说明:
- 需要注意枚举类型的定义形式:除最后一行外,每一行枚举常量以逗号“,”结尾,但是最后一行没有结尾标点符号;
- 在使用枚举类型时,通常都会为定义的枚举类型设置一个保留位,便于后续对该枚举类型进行扩展,这个保留位通常会由最后一个枚举常量充当;
- 在没有进行初始化(即省掉“=整型常数”)时,枚举类型中的第一个标识符的值默认为“0”。
2 示例代码
枚举类型的示例代码内容如下:
#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(
-1)”(详细解释见下方说明),但是如果将该表达式直接赋值给int类型的变量时,该表达式的值就会转换为int类型的值“-1”。而如果直接使用表达式“(unsigned int)(-1)”参会其他运算(如示例中的除法),再将整体的运算结果进行int类型转换,就不会出现类似的问题了。在平时涉及到类型转换时,需要特别注意这些细节;
- 示例中使用了表达式“(int)(((unsigned int)(-1))/2)”的值对应的枚举常量“somen”作为枚举类型eDemoEnum的保留位。
说明:在C/C++语言中,将“-1”强制转换为“unsigned int”类型时,会得到该类型的最大值。由于“unsigned int”类型不能表示负数,因此会按照无符号整数的方式来解释对应的比特模式。对于32位系统,“int”类型通常占用32位,其中最高位在有符号整数中代表符号位(负数为“1”)。“-1”在二进制补码形式下的表示为全“1”(32个1),即“11111111 11111111 11111111 11111111”。当这个值被转换为“unsigned int”时,这些比特位不再解释为负数的补码形式,而是作为无符号整数的比特位来看待。因此,“(unsigned int)(-1)”的值是“4294967295”(即,2^32-1)。