枚举类变量可以取整数值的全部范围吗?



有时您希望为某些整数值命名,但允许使用命名值以外的其他值。在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而不是intcolor_t,这将使999不是基类型的有效值?如果是后者,可以通过使用enum class color_t: int显式声明基类型来解决这个问题吗?

[dcl.enum]

8对于基础类型固定的枚举,枚举的值为基础类型的值。

一旦底层类型固定,其范围内的任何值都是枚举的值。枚举数只是该范围内的命名常量。

当底层类型固定时,确定涉及一些细节,但在这里不适用。有作用域的枚举总是有一个固定类型(如果没有显式给出,则为int)。

枚举类默认为int,如果你想要char,你可以这样做:

enum class color_t : char { red, green, blue };

最新更新