Définit un type pouvant être utilisé pour représenter un ensemble de valeurs constantes ou toute combinaison de ces valeurs. Cette caractéristique est généralement implémentée par les types entiers,
std::bitset
, ou les énumérations (scopées et non scopées) avec des surcharges d'opérateurs supplémentaires.
Exigences
Le type masque de bits prend en charge un nombre fini d'éléments de masque de bits, qui sont des valeurs distinctes non nulles du type masque de bits, de sorte que, pour toute paire
Ci
et
Cj
,
Ci
&
Ci
est non nul et
Ci
&
Cj
est nul. De plus, la valeur
0
est utilisée pour représenter un masque de bits vide, sans aucune valeur définie.
Les opérateurs bit à bit
operator
&
,
operator
|
,
operator
^
,
operator~
,
operator
&
=
,
operator
|
=
, et
operator
^
=
sont définis pour les valeurs du type masque de bits et ont la même sémantique que les opérateurs intégrés correspondants sur les entiers non signés auraient si les éléments du masque de bits étaient les puissances de deux entières distinctes.
Les expressions suivantes sont bien formées et ont la signification suivante pour tout
BitmaskType
:
|
Expression
|
Signification
|
|
X
|
=
Y
|
définit la valeur
Y
dans l'objet
X
|
|
X
&
=
~Y
|
efface la valeur
Y
dans l'objet
X
|
|
X
&
Y
|
un résultat non nul indique que la valeur
Y
est définie dans l'objet
X
|
Chaque élément de masque de bits représentable est défini comme une
n
inline
(depuis C++17)
constexpr
valeur du type masque de bits.
Bibliothèque standard
Les types de bibliothèque standard suivants satisfont
BitmaskType
:
Le code qui repose sur une option d'implémentation particulière (par exemple
int
n
=
std::
ios_base
::
hex
) n'est pas portable car
std::ios_base::fmtflags
n'est pas nécessairement implicitement convertible en
int
.