可能重复: C++中枚举类型数据的大小是多少?
枚举数据类型是如何在内部存储的(我可以想象为8/16/32位int?)它是否可以安全地序列化,或者应该使用像quint8这样的东西来存储值?换句话说,在所有平台上,sizeof(MyEnum)都保证大小相同吗?
发布于 2012-12-21 15:36:08
换句话说,MyEnum在所有平台上都保证是相同的大小吗?
您可以在C++11中设置显式类型(但不能在早期的C++化身中设置):
enum class Drug : char {
Cocaine,
Cannabis,
Crack
};或
enum Sex : uint32_t {
Male,
Female,
Other
};在enum前面使用enum强制Drug用户拼写Drug::Cocaine,对于声明前面没有class的枚举,拼写是可选的( Sex::Male和Female都是有效的)。
C++es在2011年之前的黑客攻击包括以下几个方面,其中强制的大小是最小的:
enum Frob {
...
FORCE_DWORD = 0x7fffffff
};在实践中见过,例如在ReactOS‘DirectX-SDK实现上。
标准参考
7.2枚举声明dcl.enum §6:对于基础类型不固定的枚举,基础类型是一个整体类型,可以表示枚举中定义的所有枚举数值。如果没有整数类型可以表示所有枚举数值,则枚举的格式不正确.它是实现定义的,即使用作为基础类型的整数类型,但基础类型不得大于int,除非枚举器的值不能适合于int或无符号int。如果枚举数列表是空的,则基础类型就好像枚举有一个值为0的枚举数。
发布于 2012-12-21 15:36:07
绝对不是那么回事。实现定义了枚举的许多特性。确保选择一个真正的(安全)类型并序列化它。
发布于 2012-12-21 15:36:25
枚举的大小与int相同,因此不能保证在任何地方都具有相同的长度。
使用stdint.h中定义的一种类型,如int32_t、int16_t等。
https://stackoverflow.com/questions/13992897
复制相似问题