C++ Bit polí
Třídy a struktury mohou obsahovat členy, které zabíral méně úložného místa než integrálního typu.Tyto členy jsou určeny jako pole bitů.Syntaxe pole bit člen declarator následující specifikace:
declarator : constant-expression
Poznámky
(Volitelné) declarator je název, kterým je přístup člena v programu.Musí být integrálního typu (včetně Výčtové typy).Konstantní výraz určuje počet bitů člen zaujímá ve struktuře.Anonymní bit pole – je bitové pole členy s žádný identifikátor – slouží pro odsazení.
[!POZNÁMKA]
Pole s nepojmenované bit 0 šířky vynutí zarovnání další bitové pole na další type hranice, kde type je typ člena.
Následující příklad prohlašuje strukturu, která obsahuje pole bit:
// 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)
};
Rozložení rámcové paměti objekt typu Date je znázorněn na následujícím obrázku.
Paměť rozložení objektu, datum
Všimněte si, že nYear je 8 bitů dlouhá a přetečení slovo hranice deklarovaný typ nepodepsané krátké.Proto je zahájena na začátku nového nepodepsané krátké.Není nutné, aby všechny bit pole vejde do jednoho objektu základní typ; nové jednotky úložiště jsou přidělena, podle počtu bitů v prohlášení.
Konkrétní společnosti Microsoft
Řazení dat deklarován jako bit pole je nízkými bit, jak je znázorněno na obrázku výše.
Konec konkrétní společnosti Microsoft
Pokud prohlášení struktury obsahuje nepojmenovanou pole o délce 0, jak ukazuje následující příklad
// 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)
};
rozložení paměti je, jak ukazuje následující obrázek.
Rozložení objektu Date s nulovou délkou bitové pole
Podkladové typu bitové pole musí být integrálního typu, jak je popsáno v Základních typů.