共用方式為


C++ 位元欄位

類別和結構可包含比整數型別佔用較少儲存區的成員。 這些成員指定為位元欄位。 位元欄位 成員宣告子 規格中的語法如下:

declarator  : constant-expression

備註

(選擇性) declarator 是成員在程式存取的名稱。 它必須是整數類資料型別 (包括列舉型別)。 constant-expression 指定成員在結構佔用的位元組數目。 匿名位元欄位 ( 亦即沒有識別項的位元欄位成員 ) 可用來填補。

注意事項注意事項

未命名的位元欄位寬度 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 位元且會造成宣告型別 unsigned short 的字邊界溢位。 因此,它會在新 unsigned short 的開頭處開始。 不需要所有位元欄位都調整至基礎型別的物件中;儲存的新單位根據宣告所要求的位元組數目被配置。

Microsoft 專有的

為位元欄位宣告的資料之順序是由低至高位元,如上面的圖所示。

END 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 物件配置

位元欄位的基底型別必須是整數類資料型別,如 基本型別中所述。

請參閱

參考

類別、結構和等位