jah*_*aho 2 c++ enums serialization qt cross-platform
可能重复:
C++中枚举类型数据的大小是多少?
如何在内部存储枚举数据类型(我想象为8/16/32位int?)并且可以安全地序列化,还是应该使用像quint8这样的值来存储值?换句话说,sizeof(MyEnum)在所有平台上保证大小相同?
换句话说,sizeof(MyEnum)保证在所有平台上都是相同的大小?
您可以(但设置C++ 11明确的类型没有在早期C++的化身):
enum class Drug : char {
Cocaine,
Cannabis,
Crack
};
Run Code Online (Sandbox Code Playgroud)
要么
enum Sex : uint32_t {
Male,
Female,
Other
};
Run Code Online (Sandbox Code Playgroud)
用class前面enum的方式迫使用户Drug拼一下Drug::Cocaine,对枚举没有class在他们的声明前,拼写是可选的(既Sex::Male和Female有效).
2011年之前用于C++的Hacks包括以下内容,它们强制实现最小尺寸:
enum Frob {
...
FORCE_DWORD = 0x7fffffff
};
Run Code Online (Sandbox Code Playgroud)
在实践中看到例如ReactOS的DirectX-SDK实现.
7.2枚举声明[dcl.enum]
[...]
§6:对于其基础类型未修复的枚举,基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值.如果没有整数类型可以表示所有枚举器值,则枚举是不正确的.它是实现定义的,其中整数类型用作 底层类型,除了底层类型不应大于int,除非枚举器的值不能适合int或unsigned int.如果枚举器列表为空,则基础类型就好像枚举具有值为0的单个枚举器一样.