一个枚举值需要多少位?

TL;博士

和都是正确的。

枚举的值受基础类型的限制,而不是枚举数的限制!

C++14,7.2枚举声明,第8段:

可以定义一个枚举,它的值没有被任何一个枚举器定义。

这意味着可以:

代码语言:javascript复制state x = static_cast< state >(5);这就是GCC警告你的:enum state的值可能不符合2位。

但是,只要您不试图对X::st进行实际操作,一切都会闪闪发亮。

这可能是克郎没有警告你的原因。

由于标准中的任何一种方法都不要求诊断,所以警告或不警告您没有错。