极大的枚举数(> 64位类型)

时间:2015-11-02 19:59:01

标签: c++ enums 64-bit

TL; DR枚举器可以保留多少个元素,并且该数字是否大于64位或96位数?

根据我对C和C ++的经验,我发现编译的最大变量类型是96位(12字节),甚至是GCC 64位的非标准加法。所以,我开始考虑枚举器以及枚举器的大小。让我们说,为了简单起见,我有一个名为foo的枚举器类型:

enum foo
{
    //Insert types here
}

而且我们的枚举器填充了大量的类型:

enum foo
{
    type1,
    type2,
    type3,
        //Some keyboard-time later....
    type9999999999999999999999999999999999999997,
    type9999999999999999999999999999999999999998,
    type9999999999999999999999999999999999999999,
    type10000000000000000000000000000000000000000 //That's fifty zeroes
}

那会编译吗? (是的,我知道汇编可以让我很好地了解冰河时代的持续时间,但仍然可以)并且我能够声明foo具有type中每一个的价值S'

1 个答案:

答案 0 :(得分:2)

来自标准:

  

对于其基础类型未修复的枚举,基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值。 如果没有整数类型可以表示所有枚举器值,则枚举格式不正确。

因此,对于标准符合编译器,如果没有可以保存所有枚举器值的整数类型,程序就不应该编译。

这是来自工作草案https://isocpp.org/std/the-standard,但我怀疑这部分已经改变了。