Namespaces
Variants

C++ named requirements: BitmaskType

From cppreference.net
C++ named requirements

Определяет тип, который может использоваться для представления набора постоянных значений или любой комбинации этих значений. Этот признак обычно реализуется целочисленными типами, 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 :

(начиная с C++17)
(начиная с C++11)
(начиная с C++17)

Код, который полагается на определённую опцию реализации (например, int n = std:: ios_base :: hex ), является непереносимым, поскольку std::ios_base::fmtflags не обязательно неявно преобразуется в int .