C + + 的位元欄位
類別和結構都可以包含佔用較少的儲存體,比整數類資料型別成員。 這些成員會指定為位元欄位。 位元欄位的語法成員宣告子規格如下所示:
declarator : constant-expression
備註
(選擇性) declarator是該成員存取的程式中的名稱。 它必須是整數型別 (包括列舉型別)。 常數運算式結構中,指定的成員所佔用的位元數。 匿名的位元欄位 — 也就是不具有識別項的位元欄位成員,可用來填補。
注意事項 |
---|
未命名的位元的欄位寬度為 0 到下一個強制的下一個位元欄位對齊type界限,其中type是成員的型別。 |
下列範例會宣告包含位元欄位的結構:
// bit_fields1.cpp
// compile with: /LD
struct Date {
unsigned short nWeekDay : 3; // 0..7 (3 bits)
unsigned short nMonthDay : 6; // 0..31 (6 bits)
unsigned short nMonth : 5; // 0..12 (5 bits)
unsigned short nYear : 8; // 0..100 (8 bits)
};
型別的物件的概念性的記憶體配置Date如下圖所示。
Date 物件的記憶體配置
請注意, nYear為 8 位元,並將超出的字組界限,宣告的型別, 不帶正負號的短。 因此,開始新的起始處不帶正負號的短。 您不需要所有位元欄位放入一個物件的基礎型別 ; 新的單位的儲存空間配置,根據宣告中所要求的位元數。
Microsoft 專有的
資料宣告為位元欄位的順序是從低到高位元,,如上圖所示。
結束 Microsoft 特定
如果結構宣告中包含未命名的欄位長度為 0,如下列範例中,所示
// bit_fields2.cpp
// compile with: /LD
struct Date {
unsigned nWeekDay : 3; // 0..7 (3 bits)
unsigned nMonthDay : 6; // 0..31 (6 bits)
unsigned : 0; // Force alignment to next boundary.
unsigned nMonth : 5; // 0..12 (5 bits)
unsigned nYear : 8; // 0..100 (8 bits)
};
記憶體配置會如下圖所示。
長度為零的位元欄位以 Date 物件的版面配置
位元欄位的基礎型別必須是整數類資料型別,如所述主要資料型別。