Definiert einen Typ, der verwendet werden kann, um eine Menge von konstanten Werten oder eine beliebige Kombination dieser Werte darzustellen. Dieses Merkmal wird typischerweise von Ganzzahltypen, std::bitset oder Aufzählungen (gelistet und ungelistet) mit zusätzlichen Operatorüberladungen implementiert.
Der Bitmasken-Typ unterstützt eine endliche Anzahl von Bitmasken-Elementen, die verschiedene Nicht-Null-Werte des Bitmasken-Typs sind, so dass für jedes Paar Ci und Cj gilt: Ci & Ci ist nicht Null und Ci & Cj ist Null. Zusätzlich wird der Wert 0 verwendet, um eine leere Bitmaske darzustellen, bei der keine Werte gesetzt sind.
Die bitweisen Operatoren operator&, operator|, operator^, operator~, operator&=, operator|= und operator^= sind für Werte des Bitmasken-Typs definiert und haben die gleiche Semantik wie die entsprechenden integrierten Operatoren auf vorzeichenlosen Ganzzahlen, wenn die Bitmasken-Elemente die verschiedenen ganzzahligen Potenzen von zwei wären.
Die folgenden Ausdrücke sind wohlgeformt und haben für jeden BitmaskType die folgende 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 Bitmasken-Element ist als einein inline(seit C++17) constexpr Wert des Bitmasken-Typs definiert.
[bearbeiten] Standardbibliothek
Die folgenden Typen der Standardbibliothek erfüllen BitmaskType
Code, der auf einer bestimmten Implementierungsoption beruht (z. B. int n = std::ios_base::hex), ist nicht portabel, da std::ios_base::fmtflags nicht notwendigerweise implizit in int konvertierbar ist.