如果您的枚举没有固定的基础类型,则可以通过std::underlying_type<E>
获取其基础类型。
enum no_fixed_underlying { bob = 1; };
std::underlying_type_t<no_fixed_underlying> x; // valid
一旦你这样做了,它仍被认为不是固定的基础类型吗?
没有固定底层类型的枚举具有有限的范围,基本上被描述为&#34;可以表示枚举值的位数范围&#34;。转换为枚举,其值为&#34;超出这些位&#34;是未定义的行为。
因此,给定一个没有固定底层类型的枚举,似乎您无法将基础类型的所有值转换为枚举值。
enum no_fixed_underlying { bob = 1; };
std::underlying_type_t<no_fixed_underlying> x = -1; // valid
auto e = (no_fixed_underlying)x; // undefined behavior!
这是对的吗?
在最新的草案中,expr.static.cast / 10和dcl.enum / 8是我基于上述理解的基础。