2016-09-21 38 views
12

予跨越this question来到关于底层类型枚举的,其中一个答案引用标准C++ 7.2/5:如果枚举不适合整型,会发生什么?

基础类型枚举的是,可以表示所有在所定义的枚举值的整体式枚举。它是实现定义的,其整数类型用作枚举的基础类型,除非基础类型的大小不能大于int,除非枚举器的值不适合int或unsigned int。

这对于所有合理的情况都很明显。 但是如果我把一个枚举如此可笑地大到甚至不能适应很长时间会发生什么呢?

(我不知道为什么会不断在实践中发生的,但也许我感觉破坏性的,有一个免费的下午)

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

+6

如果你制作一个很大的枚举,你的源文件将不适合在磁盘上:-) – dasblinkenlight

+1

我在构想一个真正令人震惊的头文件,在枚举中有超过2^64个名字。这不行吗? – Bear

+3

设计它非常简单,请参阅我的答案。 – Bathsheba

回答

10

enum foo : int 
{ 
    bar = INT_MAX, 
    oops 
}; 

行为和类似的是不确定

我在这里强行将此类型强制为int,但这同样适用于您平台上可用的最大整数类型。

+4

当枚举的基础类型是'unsigned'时它是否也是UB? –

+0

哦,这是一个美丽的问题。请问!我会立即赞扬这一点。 – Bathsheba

+2

http://stackoverflow.com/questions/39621098/what-happens-if-an-enum-cannot-fit-into-an-unsigned-integral-type –

相关问题