Define un tipo que puede utilizarse para representar un conjunto de valores constantes o cualquier combinación de esos valores. Este rasgo es típicamente implementado por tipos enteros,
std::bitset
, o enumeraciones (con ámbito y sin ámbito) con sobrecargas de operadores adicionales.
Requisitos
El tipo de máscara de bits admite un número finito de elementos de máscara de bits, que son valores distintos de cero del tipo de máscara de bits, de modo que, para cualquier par
Ci
y
Cj
,
Ci
&
Ci
es distinto de cero y
Ci
&
Cj
es cero. Además, el valor
0
se utiliza para representar una máscara de bits vacía, sin valores establecidos.
Los operadores bit a bit
operator
&
,
operator
|
,
operator
^
,
operator~
,
operator
&
=
,
operator
|
=
, y
operator
^
=
están definidos para valores del tipo bitmask y tienen la misma semántica que los operadores integrados correspondientes en enteros sin signo tendrían si los elementos de la máscara de bits fueran las distintas potencias enteras de dos.
Las siguientes expresiones están bien formadas y tienen el siguiente significado para cualquier
BitmaskType
:
|
Expresión
|
Significado
|
|
X
|
=
Y
|
establece el valor
Y
en el objeto
X
|
|
X
&
=
~Y
|
borra el valor
Y
en el objeto
X
|
|
X
&
Y
|
un resultado distinto de cero indica que el valor
Y
está establecido en el objeto
X
|
Cada elemento de máscara de bits representable se define como un
n
inline
(since C++17)
constexpr
valor del tipo de máscara de bits.
Biblioteca estándar
Los siguientes tipos de la biblioteca estándar satisfacen
BitmaskType
:
El código que depende de alguna opción de implementación particular (por ejemplo,
int
n
=
std::
ios_base
::
hex
) no es portable porque
std::ios_base::fmtflags
no es necesariamente convertible implícitamente a
int
.