枚举的简单认识
什么是枚举?
枚举:具有有限个整数符号常量的集合,这些整型符号常量称为枚举常量,枚举的定义很简单,和结构体差不多,只需要把关键字 struct 改为 enum :
enum 枚举类型名 {
枚举常量1,
枚举常量2
// 可以继续罗列更多枚举常量
};
例如:
enum Weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
注意:在枚举定义里,枚举成员之间应该用逗号分隔,如果是最后一个成员,后面可以跟一个分号结束整个枚举类型的定义。
枚举的类型有什么用?
枚举类型使用具有实际意义的名字来代表一组常量,例如,在一个图形绘制程序中,可能会有不同的形状选顶,如圆形 (CIRCLE) 、矩形( REC TANGL E )、三尾角形(TRIANGLE) 等。通过定义枚举类型:
enum Shape {
CIRCLE,
RECTANGLE,
TRIANGLE
};
比起使用数字(如 0 代表圆形、1 代表矩形、2 代表三角形)来表示形状选项,枚举类型使得代码的语义更加清晰。当看到Shape类型的变量被赋值为CIRCLE时,很容易理解其代表的含义。
声明变量并定义枚举类型
可以在定义枚举类型的同时声明该类型的变量,形式如下:
enum 枚举类型名 {
枚举常量1,
枚举常量2
} 变量名1, 变量名2;
例如:
enum Color {
RED,
GREEN,
BLUE
} myColor, yourColor;
匿名枚举声明(较少单独这样用):
enum {
OPTION1,
OPTION2
};
enum class(强类型枚举)声明:
enum class 枚举类型名 {
枚举常量1,
枚举常量2
};
例如:
enum class Status {
SUCCESS,
FAILURE,
PENDING
};
enum class这种强类型枚举的好处是,其枚举常量的作用域限定在枚举类型内部,不会和其他同名的标识符冲突,使用时需要显式指定枚举类型,如Status::SUCCESS,这提高了代码的类型安全性和可读性,能避免一些因为命名空间污染等导致的潜在问题,是 C++ 中推荐使用的枚举定义方式(相较于传统的非限定作用域的枚举)。
enum struct声明(和enum class基本等效):
在功能上enum struct和enum class几乎一样,只是语法上使用enum struct关键字,例如:
enum struct Size {
SMALL,
MEDIUM,
LARGE
};
同样,使用其枚举常量时要通过Size::SMALL等形式指定所属的枚举类型。
(完)