C++ 具名要求:位掩码类型 (BitmaskType)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

定义能用来表示一组常量值或这些值的任何组合的类型。此特征常以整数类型、std::bitset、或带附加运算符重载的枚举(有作用域和无作用域)实现。

要求

位掩码类型支持有限数量的位掩码元素,它们拥有各不相同的位掩码类型的非零值,满足对于任意一对 CiCjCi & 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)

依赖某些特定实现选项(例如 int n = std::ios_base::hex)的代码是不可移植的,因为 std::ios_base::fmtflags 不需要可隐式转换到 int