如果枚举不能适合整数类型会发生什么?

Bea*_*ear 12 c++ size enums types

我遇到了关于枚举的基础类型的问题,答案引用标准C++ 7.2/5作为:

枚举的基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值.它是实现定义的,其中整数类型用作枚举的基础类型,除了基础类型不应大于int,除非枚举器的值不能适合int或unsigned int.

对于所有合理的情况,这都很清楚.但是,如果我的枚举如此可笑,以至于它甚至无法长时间适应,会发生什么呢?

(我不知道为什么在实践中会发生这种情况,但也许我感觉很具破坏性并且有一个自由的下午)

这种行为是由标准定义的吗?

Bat*_*eba 10

的行为

enum foo : int
{
    bar = INT_MAX,
    oops
};
Run Code Online (Sandbox Code Playgroud)

和类似的未定义.

我在这里通过强制类型来欺骗一点int,但同样适用于您平台上可用的最大整数类型.

  • 当枚举的底层类型是"unsigned"时,它也是UB吗? (4认同)
  • http://stackoverflow.com/questions/39621098/what-happens-if-an-enum-cannot-fit-into-an-unsigned-integral-type (2认同)