转换为没有固定底层类型的枚举" gamut"

时间:2016-10-13 15:30:43

标签: c++ enums c++14 c++17 underlyingtype

如果您的枚举没有固定的基础类型,则可以通过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是我基于上述理解的基础。

0 个答案:

没有答案