有时您希望为某些整数值命名,但允许使用命名值以外的其他值。在c++中,这很容易通过普通的enum
:
enum { red, green, blue };
int color = 999;
假设在一些不寻常的上下文中,您希望使用enum class
进行类型检查,但也允许使用其他值:
enum class color_t { red, green, blue };
color_t color = (color_t)999;
这样还可以吗?或者是这样的情况,例如,编译器可以选择基于char
而不是int
的color_t
,这将使999不是基类型的有效值?如果是后者,可以通过使用enum class color_t: int
显式声明基类型来解决这个问题吗?
[dcl.enum]
8对于基础类型固定的枚举,枚举的值为基础类型的值。
一旦底层类型固定,其范围内的任何值都是枚举的值。枚举数只是该范围内的命名常量。
当底层类型固定时,确定涉及一些细节,但在这里不适用。有作用域的枚举总是有一个固定类型(如果没有显式给出,则为int
)。
枚举类默认为int
,如果你想要char
,你可以这样做:
enum class color_t : char { red, green, blue };