首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举型跨平台在C++中是吗?

枚举型跨平台在C++中是吗?
EN

Stack Overflow用户
提问于 2012-12-21 15:34:12
回答 4查看 1.2K关注 0票数 2

可能重复: C++中枚举类型数据的大小是多少?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-21 15:36:08

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

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

代码语言:javascript
复制
enum class Drug : char {
    Cocaine,
    Cannabis,
    Crack
};

代码语言:javascript
复制
enum Sex : uint32_t {
    Male,
    Female,
    Other
};

enum前面使用enum强制Drug用户拼写Drug::Cocaine,对于声明前面没有class的枚举,拼写是可选的( Sex::MaleFemale都是有效的)。

C++es在2011年之前的黑客攻击包括以下几个方面,其中强制的大小是最小的:

代码语言:javascript
复制
enum Frob {
    ...
    FORCE_DWORD          = 0x7fffffff
};

在实践中见过,例如在ReactOS‘DirectX-SDK实现上。

标准参考

7.2枚举声明dcl.enum §6:对于基础类型不固定的枚举,基础类型是一个整体类型,可以表示枚举中定义的所有枚举数值。如果没有整数类型可以表示所有枚举数值,则枚举的格式不正确.它是实现定义的,即使用作为基础类型的整数类型,但基础类型不得大于int,除非枚举器的值不能适合于int或无符号int。如果枚举数列表是空的,则基础类型就好像枚举有一个值为0的枚举数。

票数 9
EN

Stack Overflow用户

发布于 2012-12-21 15:36:07

绝对不是那么回事。实现定义了枚举的许多特性。确保选择一个真正的(安全)类型并序列化它。

票数 3
EN

Stack Overflow用户

发布于 2012-12-21 15:36:25

枚举的大小与int相同,因此不能保证在任何地方都具有相同的长度。

使用stdint.h中定义的一种类型,如int32_tint16_t等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13992897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档