目录
普通枚举
强类型枚举
普通枚举
枚举类型在C++中是通过关键字enum
来定义的。下面是一个简单的例子:
enum Color { RED, GREEN, BLUE
};
在这个例子中,我们定义了一个名为Color
的枚举类型,它包含了三个枚举值:RED
、GREEN
和BLUE
。默认情况下,第一个枚举值(在这个例子中是RED
)的值为0,后续的枚举值会依次递增。所以,在这个例子中,RED
的值为0,GREEN
的值为1,BLUE
的值为2。
当然,你也可以显式地为每个枚举值指定一个整数值:
enum Color { RED = 1, GREEN = 2, BLUE = 4
};
在这个修改后的例子中,RED
的值为1,GREEN
的值为2,BLUE
的值为4。
你可以使用枚举类型来声明变量,并给这些变量赋值枚举值:
Color myColor = RED;
此外,你还可以使用枚举类型作为函数参数的类型,或者作为数组、结构或类的成员的类型。这都可以提高代码的可读性和可维护性。
注意:虽然枚举值在定义时是命名的整数值,但在使用时它们通常被视为它们的底层整数值。因此,你可以将枚举值赋给整数类型的变量,也可以将整数类型的值赋给枚举类型的变量(只要这个整数值在枚举值的范围内)。但是,这样做可能会降低代码的可读性和可维护性,所以应该尽量避免。
强类型枚举
在C++中,从C++11开始,你可以为枚举类型指定一个底层数据类型(underlying type),以控制枚举值的大小和范围。
#include <iostream> enum class Color : unsigned char { RED = 1, GREEN = 2, BLUE = 4
}; int main() { Color myColor = Color::RED; // 输出枚举值的底层整数表示 std::cout << "The value of RED is: " << static_cast<unsigned char>(myColor) << std::endl; // 尝试将一个大于底层类型范围的整数赋值给枚举变量(这会导致编译错误) // Color myOtherColor = Color(256); // 这将不会编译通过,因为256超出了unsigned char的范围 return 0;
}
在这个例子中,Color
枚举类型被指定了一个底层数据类型unsigned char
。这意味着枚举值RED
、GREEN
和BLUE
将使用unsigned char
类型来存储。如果尝试将一个超出unsigned char
范围的值赋给Color
类型的变量,编译器将会报错。
注意,在这个例子中我还使用了enum class
而不是enum
。enum class
是C++11中引入的强类型枚举(strongly typed enumeration),它提供了更好的类型安全性和作用域控制。使用enum class
时,枚举值需要使用枚举类型名和::
作用域解析运算符来访问,例如Color::RED
。而传统的enum
(也称为非类型安全的枚举或旧式枚举)则没有这样的作用域限制,它们的枚举值将直接处于包含它们的命名空间中。