2016-09-21 43 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 –

相關問題