【发布时间】:2013-06-11 20:56:47
【问题描述】:
我想定义一个小于一个字节的枚举,同时保持类型安全。
将枚举定义为:
enum MyEnum : unsigned char
{
i ,j, k, w
};
我可以将它缩小到一个字节,但是我想让它只使用 2 位,因为我最多会有 4 个值。这个可以吗?
在我使用枚举的结构中,以下内容不起作用
struct MyStruct
{
MyEnum mEnum : 2; // This will be 4 bytes in size
};
谢谢!
更新:
问题来自这个场景:
enum MyEnum : unsigned char
{
i ,j, k, w
};
struct MyStruct
{
union
{
signed int mXa:3;
unsigned int mXb:3;
};
union
{
signed int mYa:3;
unsigned int mYb:3;
};
MyEnum mEnum:2;
};
sizeof(MyStruct) 显示 9 个字节。理想情况下,我希望结构的大小为 1 个字节。
已实施解决方案的更新:
这个结构是一个字节,提供相同的功能和类型安全:
enum MyEnum :unsigned char
{
i,j,k,w
};
struct MyStruct
{
union
{
struct { MyEnum mEnum:2; char mXa:3; char mXb:3;};
struct { MyEnum mEnum:2; unsigned char mYa:3; unsigned char mYb:3;};
};
};
【问题讨论】:
-
不。最好的选择是使用位域,但在 C++ 中,不小于一个字节本身是可寻址的。
-
您到底想解决什么问题?提供一些上下文可能有助于揭示设计缺陷或更好的解决方案。
-
我正在尝试尽可能地缩小结构以应对挑战,但我不明白为什么不能这样做,因此结构不大于 1 个字节。
标签: c++ optimization enums standards