C++ 具名要求:位掩码类型 (BitmaskType)
来自cppreference.com
定义能用来表示一组常量值或这些值的任何组合的类型。此类型常以整数类型、 std::bitset 、或带附加运算符重载的枚举(有作用域和无作用域)实现。
要求
位掩码类型支持有限数量的位掩码元素,它们拥有各不相同的位掩码类型的非零值,满足对于任意对 Ci 与 Cj , Ci & Ci 非零而 Ci & Cj 为零。另外,值 0
用于表示空位掩码,而无值集合。
逐位运算符 operator& 、 operator| 、 operator^ 、 operator~ 、 operator&= 、 operator|= 及 operator^= 对位掩码类型的值定义,且拥有无符号整数上会有的对应内建运算符的相同语义,若位掩码元素为相异的二的幂。
对任何位掩码类型 (BitmaskType) ,下列表达式为良构且拥有下列含义
X |= Y | 在对象 X 中设置值 Y |
X &= ~Y | 在对象 X 中清除值 Y |
X & Y | 非零结果指示已于对象 X 设置值 Y |
每个可表示的位掩码元素定义为位掩码类型的 inline (C++17 起)constexpr 值。
用法
下列标准库类型满足位掩码类型 (BitmaskType) :
- 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::copy_options (C++17 起)
- std::filesystem::directory_options (C++17 起)
依赖某些特定实现选项的代码(例如 int n = std::ios_base::hex )是不可移植的,因为 std::ios_base::fmtflags 不需要可隐式转换为 int 。