我想定義一個枚舉小於一個字節,同時保持類型安全。定義一個小於一個字節的枚舉/爲什麼這個結構大於一個字節?
定義枚舉爲:
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++中,本身不能少於一個字節。 – 2013-06-11 21:00:40
你究竟想要解決什麼問題?給出一些背景可能有助於揭示設計缺陷或更好的解決方案。 –
我試圖儘可能地縮小結構以應對挑戰,我不明白爲什麼它不能完成,因此結構不會超過1個字節。 – mrantifreeze