我正在创建一个包含许多部分的大规模模拟,我使用枚举来区分多个部分。我想知道使用枚举的内存成本是多少,因为我希望将部件占用的空间保持在最小。
使用uint8_t而不是枚举更好吗?
答案 0 :(得分:6)
在C ++(任何版本)中,默认情况下,枚举的基础类型为int
,除非每个枚举器值都不能表示为int
。
在这种情况下,使用实现定义的类型(一个足够大以表示每个枚举器值)。请注意,int
的大小取决于您的计算机。它可能是16位,但可能是32位(即使在64位机器上)。最终,它由编译器决定。
从C ++ 11开始,您可以在声明枚举时指定基础类型,使用以下格式:
enum name : underlying_type { ... };
// For example
enum MySmallEnum : char { ... };
In C,它似乎遵循与C ++相同的规则(在C ++ 11之前)。