Bitová pole jazyka C++
Třídy a struktury mohou obsahovat členy, které zabírají méně úložného prostoru než celočíselný typ.Tyto členy jsou určeny jako bitová pole.Následuje specifikace syntaxe bitového pole member-declarator:
declarator : constant-expression
Poznámky
(Nepovinný) declarator je název, jehož prostřednictvím je k členu v programu přistupováno.Musí být celočíselného typu (včetně výčtových typů).constant-expression určuje počet bitů, které člen zaujímá ve struktuře.Anonymní bitová pole, tedy členská bitová pole bez identifikátoru, slouží pro odsazení.
[!POZNÁMKA]
Nepojmenované bitové pole délky 0 vynutí zarovnání dalšího bitového pole na další hranici type, kde type je typ člena.
Následující příklad deklaruje strukturu, která obsahuje bitová pole:
// 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)
};
Koncepční rozvržení paměti objektu typu Date je znázorněno na následujícím obrázku.
Rozložení paměti objektu Date
Je třeba poznamenat, že člen nYear je 8 bitů dlouhý a přeteče hranice slova deklarovaného typu unsigned short.Proto je zahájen na začátku nového unsigned short.Není nutné, aby se všechna bitová pole vlezla do jednoho objektu použitého typu. Nové jednotky úložiště jsou přidělovány podle vyžadovaného počtu bitů v deklaraci.
Specifické pro Microsoft
Řazení dat, která jsou deklarována jako bitová pole, je od nízkého po vysoký bit, jak je znázorněno na obrázku výše.
Specificka produktu Microsoft END
Pokud deklarace struktury obsahuje nepojmenované pole o délce 0, jak je znázorněno v následujícím příkladu,
// 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)
};
je rozvržení paměti znázorněno na následujícím obrázku.
Rozložení objektu Date s nulovou délkou bitového pole
Použitý typ bitového pole musí být celočíselného typu, jak je popsáno v Základní typy.