Definiert einen Typ, der verwendet werden kann, um eine Menge konstanter Werte oder beliebige Kombinationen dieser Werte darzustellen. Dieses Merkmal wird typischerweise durch Ganzzahltypen,
std::bitset
oder Enumerationen (scoped und unscoped) mit zusätzlichen Operatorüberladungen implementiert.
Anforderungen
Der Bitmask-Typ unterstützt eine begrenzte Anzahl von Bitmask-Elementen, die unterschiedliche Nicht-Null-Werte des Bitmask-Typs sind, sodass für jedes Paar
Ci
und
Cj
,
Ci
&
Ci
ungleich Null ist und
Ci
&
Cj
gleich Null ist. Zusätzlich wird der Wert
0
verwendet, um eine leere Bitmask ohne gesetzte Werte darzustellen.
Die bitweisen Operatoren
operator
&
,
operator
|
,
operator
^
,
operator~
,
operator
&
=
,
operator
|
=
und
operator
^
=
sind für Werte des Bitmask-Typs definiert und haben dieselbe Semantik wie die entsprechenden eingebauten Operatoren für vorzeichenlose Ganzzahlen, wenn die Bitmask-Elemente die verschiedenen ganzzahligen Zweierpotenzen wären.
Die folgenden Ausdrücke sind wohlgeformt und haben die folgende Bedeutung für jeden
BitmaskType
:
|
Ausdruck
|
Bedeutung
|
|
X
|
=
Y
|
setzt den Wert
Y
im Objekt
X
|
|
X
&
=
~Y
|
löscht den Wert
Y
im Objekt
X
|
|
X
&
Y
|
ein Ergebnis ungleich Null zeigt an, dass der Wert
Y
im Objekt
X
gesetzt ist
|
Jedes darstellbare Bitmaskenelement ist definiert als ein
n
inline
(since C++17)
constexpr
Wert des Bitmaskentyps.
Standardbibliothek
Die folgenden Standardbibliothekstypen erfüllen
BitmaskType
:
Code, der auf eine bestimmte Implementierungsoption angewiesen ist (z.B.
int
n
=
std::
ios_base
::
hex
), ist nicht portabel, weil
std::ios_base::fmtflags
nicht notwendigerweise implizit in
int
konvertierbar ist.