Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: BitmaskType

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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.

[bearbeiten] Anforderungen

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

(seit C++17)
(seit C++11)
(seit C++11)
(seit C++11)
(seit C++11)
(seit C++17)
(seit C++17)
(seit C++17)
(seit C++17)

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.