Определяет тип, который может использоваться для представления набора постоянных значений или любой комбинации этих значений. Этот признак обычно реализуется целочисленными типами,
std::bitset
, или перечислениями (scoped и unscoped) с дополнительными перегруженными операторами.
Требования
Тип битовой маски поддерживает конечное число элементов битовой маски, которые являются различными ненулевыми значениями типа битовой маски, такими, что для любой пары
Ci
и
Cj
,
Ci
&
Ci
является ненулевым и
Ci
&
Cj
является нулевым. Кроме того, значение
0
используется для представления пустой битовой маски, в которой не установлены никакие значения.
Побитовые операторы
operator
&
,
operator
|
,
operator
^
,
operator~
,
operator
&
=
,
operator
|
=
и
operator
^
=
определены для значений типа bitmask и имеют ту же семантику, что и соответствующие встроенные операторы для беззнаковых целых чисел, если бы элементы битовой маски были различными целыми степенями двойки.
Следующие выражения являются корректными и имеют следующий смысл для любого
BitmaskType
:
|
Выражение
|
Значение
|
|
X
|
=
Y
|
устанавливает значение
Y
в объекте
X
|
|
X
&
=
~Y
|
сбрасывает значение
Y
в объекте
X
|
|
X
&
Y
|
ненулевой результат указывает, что значение
Y
установлено в объекте
X
|
Каждый представимый элемент битовой маски определяется как
n
inline
(since C++17)
constexpr
значение типа битовой маски.
Стандартная библиотека
Следующие типы стандартной библиотеки удовлетворяют требованиям
BitmaskType
:
Код, который полагается на определённую опцию реализации (например,
int
n
=
std::
ios_base
::
hex
), является непереносимым, поскольку
std::ios_base::fmtflags
не обязательно неявно преобразуется в
int
.