目录
普通枚举
强类型枚举
普通枚举
枚举类型在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(也称为非类型安全的枚举或旧式枚举)则没有这样的作用域限制,它们的枚举值将直接处于包含它们的命名空间中。