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'
答案 0 :(得分:2)
来自标准:
对于其基础类型未修复的枚举,基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值。 如果没有整数类型可以表示所有枚举器值,则枚举格式不正确。
因此,对于标准符合编译器,如果没有可以保存所有枚举器值的整数类型,程序就不应该编译。
这是来自工作草案https://isocpp.org/std/the-standard,但我怀疑这部分已经改变了。