C++ 是C+中的枚举类型跨平台+;?

C++ 是C+中的枚举类型跨平台+;?,c++,qt,serialization,enums,cross-platform,C++,Qt,Serialization,Enums,Cross Platform,可能重复: 枚举数据类型是如何在内部存储的(我可以想象为8/16/32位int?),它可以安全地序列化,还是应该使用类似quint8的东西来存储值?换句话说,sizeof(MyEnum)保证在所有平台上都是相同的大小吗?肯定不是。枚举的许多特征都是由实现定义的。确保选择真实(安全)类型并序列化该类型 换句话说,sizeof(MyEnum)在所有平台上都保证相同的大小吗 可以在C++ 11中设置一个显式类型(但不是在早期的C++化身中): 或 顺便说一句,在enum前面使用class会迫使Dru

可能重复:


枚举数据类型是如何在内部存储的(我可以想象为8/16/32位int?),它可以安全地序列化,还是应该使用类似quint8的东西来存储值?换句话说,
sizeof(MyEnum)
保证在所有平台上都是相同的大小吗?

肯定不是。枚举的许多特征都是由实现定义的。确保选择真实(安全)类型并序列化该类型

换句话说,sizeof(MyEnum)在所有平台上都保证相同的大小吗

可以在C++ 11中设置一个显式类型(但不是在早期的C++化身中):

顺便说一句,在
enum
前面使用
class
会迫使
Drug
的用户拼写它
Drug::cookine
,对于声明前面没有
class
的枚举,拼写是可选的(性别::男性和
女性
都是有效的)

2011年之前的C++es黑客攻击包括以下内容,这将强制最小规模:

enum Frob {
    ...
    FORCE_DWORD          = 0x7fffffff
};
在实践中看到,例如在ReactOS'上


标准参考 7.2枚举声明[dcl.enum] [……]

§6:对于基础类型不固定的枚举,基础类型是可以 表示枚举中定义的所有枚举数值。如果没有整数类型,则可以表示所有 枚举数值时,枚举的格式不正确。由实现定义使用哪种积分类型 作为基础类型,但基础类型不得大于int,除非 枚举数不能放入整数或无符号整数。如果枚举数列表为空,则基础类型为 就像枚举有一个值为0的枚举数一样


它通常与int相同,int可以有不同的大小

枚举的大小与
int
相同,因此不能保证每个地方的长度都相同


使用
stdint.h
中定义的类型之一,如
int32\u t
int16\u t
,等等。

+1,答案中没有性和毒品。是的,现在是周五,人们已经在考虑周末了;)
enum Sex : uint32_t {
    Male,
    Female,
    Other
};
enum Frob {
    ...
    FORCE_DWORD          = 0x7fffffff
};