Namespaces
Variants

C++ named requirements: BitmaskType

From cppreference.net
C++ named requirements

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.