Namespaces
Variants

C++ named requirements: BitmaskType

From cppreference.net
C++ named requirements

定义一种可用于表示一组常量值或这些值的任意组合的类型。该特性通常由整数类型、 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 非零结果表示值 Y 已在对象 X 中设置

每个可表示的位掩码元素被定义为该位掩码类型的 一个 inline (since C++17) constexpr 值。

标准库

以下标准库类型满足 BitmaskType

(自 C++17 起)
(自 C++11 起)
(自 C++17 起)

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