Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Klassen und Strukturen können Member enthalten, die weniger Speicher als ein ganzzahliger Typ belegen. Diese Member werden als Bitfelder angegeben. Im Folgenden finden Sie die Syntax für die member-declarator-Bitfeldangabe:
Syntax
Deklarator : konstanter Ausdruck
Hinweise
Der (optionale) Deklarator ist der Name, über den der Zugriff auf den Member im Programm erfolgt. Es muss ein ganzzahliger Typ sein (einschließlich Enumerationstypen). constant-expression gibt die Anzahl von Bits an, die der Member in der Struktur einnimmt. Anonyme Bitfelder, also Bitfeldmember ohne Bezeichner, können zur Auffüllung verwendet werden.
Hinweis
Ein unbenanntes Bitfeld der Breite 0 (null) erzwingt die Ausrichtung des nächsten Bitfelds an der nächsten Typ-Grenze, wobei Typ den Typ des Members angibt.
Das folgende Beispiel deklariert eine Struktur, die zwei Bitfelder enthält:
// 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)
};
Das konzeptionelle Speicherlayout eines Objekts vom Typ Date
wird in der folgenden Abbildung dargestellt:
32 Bit Arbeitsspeicher werden in einer Zeile angezeigt. Beginnend mit dem am wenigsten signifikanten Bit sind 3 Bit für nWeekDay. Die nächsten 6 Bits gelten für nMonthDay. Die nächsten 5 Bits gelten für nMonth. Die nächsten 2 Bits werden nicht verwendet. Die nächsten 8 Bits sind für nYear. Die verbleibenden 8 Bits werden nicht verwendet.
nYear
ist 8 Bit lang, die die Wortgrenze des deklarierten Typs unsigned short
überlaufen würde. Daher beginnt es am Anfang eines neuen unsigned short
. Es ist nicht notwendig, dass alle Bitfelder in ein Objekt des zugrunde liegenden Typs passen. Neue Speichereinheiten werden entsprechend der Anzahl von Bits, die in der Deklaration angefordert werden, zugeordnet.
Microsoft-spezifisch
Die Daten, die als Bitfelder deklariert werden, werden beginnend mit dem niedrigsten Bitwert bis hin zum höchsten Bitwert aufgeführt, wie in der vorherigen Abbildung dargestellt.
Ende Microsoft-spezifisch
Wenn die Deklaration einer Struktur ein unbenanntes Feld mit der Länge 0 (null) enthält, wie im folgenden Beispiel gezeigt:
// 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)
};
Dann folgt das Speicherlayout der in der folgenden Abbildung dargestellten Struktur:
64 Bit Arbeitsspeicher werden in einer Zeile angezeigt. Beginnend mit dem am wenigsten signifikanten Bit sind 5 Bit für n Month. Die nächsten 8 Bits sind für n Year. Die nächsten 19 Bits werden nicht verwendet. Die nächsten 3 Bits gelten für n WeekDay. Die nächsten 6 Bits gelten für n MonthDay. Die verbleibenden Bits werden nicht verwendet.
Der zugrunde liegende Typ eines Bitfelds muss ein ganzzahliger Typ sein, wie unter integrierte Typen beschrieben.
Wenn der Initialisierer für einen Verweis des Typs const T&
ein Wert ist, der auf ein Bitfeld vom Typ T
verweist, wird der Verweis nicht direkt an das Bitfeld gebunden. Stattdessen wird der Verweis an einen temporären initialisierten Wert gebunden, um den Wert des Bitfelds zu speichern.
Einschränkungen bei Bitfeldern
Die folgende Liste zeigt Einzelheiten zu fehlerhaften Operationen in Bitfeldern:
Verwenden der Adresse eines Bitfelds.
Initialisieren eines nicht-
const
Verweises mit einem Bitfeld.