C++ named requirements: BitmaskType
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 :
| (seit C++17) |
| (seit C++11) |
| (seit C++17) |
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.