共用方式為


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 物件的記憶體配置

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 物件的版面配置

Date 物件配置 0 長度位元欄位

位元欄位的基礎型別必須是整數類資料型別,如所述主要資料型別

請參閱

參考

類別、 結構和等位