[英]C++ - Defining 1 Bit Bools
定義結構的后果如下:
typedef struct {
bool Bit0 : 1; //Bit 0
bool Bit1 : 1;
bool Bit2 : 1;
bool Bit3 : 1;
bool Bit4 : 1;
bool Bit5 : 1;
bool Bit6 : 1;
bool Bit7 : 1; //Bit 7
char SomeOtherData;
}Char16Bits;
...
Char16Bits MyStructure;
MyStructure.Bit0 = true;
MyStructure.Bit1 = false;
在我的測試程序中,一切似乎都很好,每個“ Bit0-7”僅占用1位,並且我可以看到它們在內存中按預期方式工作。 當查看VS2010內存窗口時,“ SomeOtherData”字符似乎是內存中結構的第二個字節,這一切都很好。
但是,我可以可靠地假設這些位中的每一個始終僅占1位嗎? 如果我將2個字節存入此結構,第二個字節是否總是可靠地占據結構中的“ SomeOtherData” char元素?
結構打包始終取決於編譯器,但是大多數編譯器應將此打包成兩個字節。
您可以依賴sizeof(MyStructure)
作為數據結構的總大小(考慮到此處討論的填充), 為什么結構的sizeof不等於每個成員的sizeof的總和? )和offsetof(Char16Bits,SomeOtherData)
是SomeOtherData
的正確偏移量。
如果您需要編寫假定特定大小或偏移量的代碼,請使用assert()
或static_assert()
以使該代碼不允許在不符合您的假設的平台上運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.