C++ 命名要求: BitmaskType
来自 cppreference.com
定义一种类型,可用于表示一组常量值或这些值的任意组合。此特性通常由整数类型、std::bitset 或枚举(作用域和非作用域)以及额外的运算符重载实现。
[编辑] 要求
位掩码类型支持有限数量的位掩码元素,这些元素是位掩码类型的不同非零值,因此对于任何对 Ci 和 Cj,Ci & Ci 非零,而 Ci & Cj 为零。此外,值 0 用于表示空位掩码,没有设置任何值。
位运算符 operator&、operator|、operator^、operator~、operator&=、operator|= 和 operator^= 被定义用于位掩码类型的值,并且具有与在位掩码元素是 2 的不同整数值幂时内置运算符在无符号整数上的语义相同。
以下表达式格式正确,并且对于任何 BitmaskType 具有以下含义
X |= Y | 在对象 X 中设置值 Y |
X &= ~Y | 清除对象 X 中的值 Y |
X & Y | 非零结果表示对象 X 中设置了值 Y |
每个可表示的位掩码元素被定义为 inline(自 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 (自 C++11)
- std::regex_constants::syntax_option_type (自 C++11)
- std::regex_constants::match_flag_type (自 C++11)
- std::launch (自 C++11)
- std::filesystem::perms (自 C++17)
- std::filesystem::perm_options (自 C++17)
- std::filesystem::copy_options (自 C++17)
- std::filesystem::directory_options (自 C++17)
依赖于某些特定实现选项(例如 int n = std::ios_base::hex)的代码不可移植,因为 std::ios_base::fmtflags 不一定隐式转换为 int。