Spec-Zone.ru › C++

Именованные требования 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:

  • std::chars_format
(начиная с C++17)
  • std::ctype_base::mask
  • std::ios_base::fmtflags
  • std::ios_base::iostate
  • std::ios_base::openmode
  • std::regex_traits::char_class_type
  • std::regex_constants::syntax_option_type
  • std::regex_constants::match_flag_type
  • std::launch
(начиная с C++11)
  • std::filesystem::perms
  • std::filesystem::perm_options
  • std::filesystem::copy_options
  • std::filesystem::directory_options
(начиная с 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API