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