Именованные требования C++: BitmaskType
Определяет тип, который можно использовать для представления набора постоянных значений или любой комбинации этих значений. Это свойство обычно реализуется целочисленными типами, std::bitset или перечислениями (с областью видимости и без неё) с дополнительными перегрузками операторов.
Требования
Тип битовой маски поддерживает конечное число элементов битовой маски, представляющих собой различные ненулевые значения этого типа, такие что для любой пары Ci и Cj значение Ci & Ci ненулевое, а значение Ci & Cj равно нулю. Кроме того, значение 0 используется для представления пустой битовой маски, в которой не установлено ни одного значения.
Побитовые операторы operator&, operator|, operator^, operator~, operator&=, operator|= и operator^= определены для значений типа битовой маски и имеют ту же семантику, что и соответствующие встроенные операторы для беззнаковых целых чисел, если бы элементы битовой маски являлись различными целыми степенями двойки.
Следующие выражения корректны и имеют указанный смысл для любого типа BitmaskType:
| Выражение | Значение |
|---|---|
X |= Y | устанавливает значение Y в объекте X |
X &= ~Y | сбрасывает значение Y в объекте X |
X & Y | ненулевой результат указывает, что значение Y установлено в объекте X |
Каждый представимый элемент битовой маски определяется как встроенное(начиная с C++17) значение constexpr типа битовой маски.
Стандартная библиотека
Следующие типы стандартной библиотеки удовлетворяют требованиям BitmaskType:
| (начиная с C++17) |
| (начиная с C++11) |
| (начиная с C++17) |
Код, зависящий от некоторого конкретного параметра реализации (например, int n = std::ios_base::hex), непереносим, поскольку std::ios_base::fmtflags не обязательно неявно преобразуется к int.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/BitmaskType