是c++;与常规枚举相比,枚举结构的大小更大? C++的枚举结构(类)大小是否比普通枚举大?i、 e.假设指令代码枚举相同的精确数据,什么会转换为更多字节的指令代码

是c++;与常规枚举相比,枚举结构的大小更大? C++的枚举结构(类)大小是否比普通枚举大?i、 e.假设指令代码枚举相同的精确数据,什么会转换为更多字节的指令代码,c++,enums,C++,Enums,我是在嵌入式环境中开发的,这个问题很重要。我想使用枚举结构允许的类型安全性和作用域,但不以代码膨胀为代价。否。 语义上的差异由编译器管理,因为它只与类型系统相关 没有理由需要更多的存储空间,也没有理由需要更多的说明 您可以使用sizeof轻松地在实际类型上查看前者 但是,我应该注意到,C++并不能保证任何类型的布局,除非说共享相同基础类型的两个枚举类型是“布局兼容”( [C++ 14:7.2/9 ] < /COD>)。我猜它们的大小相同。您可以在C++中指定枚举的大小。假设您希望基础整数类型是一

我是在嵌入式环境中开发的,这个问题很重要。我想使用枚举结构允许的类型安全性和作用域,但不以代码膨胀为代价。

否。

语义上的差异由编译器管理,因为它只与类型系统相关

没有理由需要更多的存储空间,也没有理由需要更多的说明

您可以使用
sizeof
轻松地在实际类型上查看前者


<>但是,我应该注意到,C++并不能保证任何类型的布局,除非说共享相同基础类型的两个枚举类型是“布局兼容”(<代码> [C++ 14:7.2/9 ] < /COD>)。我猜它们的大小相同。您可以在
C++
中指定枚举的大小。假设您希望基础整数类型是一个8位数字,您可以说:enum class Myenum:uint8_t{}@DavideSpataro:对,但是,据我所知,这并不保证
sizeof(Myenum)==sizeof(uint8_t)
。一般来说,我期望它,这是我在编译器上得到的。但是在做出假设时要小心。@LightnessRacesinOrbit-指定基础类型是为了在转发声明中与ABI兼容,不是吗?我们真的不能假设大小是一样的吗?因为如果我们不能,这听起来像是一个缺陷。@StoryTeller:指定基础类型是为了指定范围。C++程序描述程序的意义,而不是计算机指令所需的实现程序的意义。虽然您的平台的ABI确实对这样的类型施加布局约束,但是C++本身显然没有。这不是缺陷,这是完全正常的。例如,考虑<代码> SIEZOFF()/Case>也是实现定义的,考虑类填充,考虑EnthAness……@ DavideSpataro -如果您阅读了标准,您会看到,像指定的亮度一样,它只处理枚举可以采用WRT的基础类型的值。和它的大小无关。理论上它可以是一个int的大小,但如果不使程序格式错误,则取不大于255的值。