定义一种可用于表示一组常量值或这些值的任意组合的类型。该特性通常由整数类型、
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
:
依赖特定实现选项的代码(例如
int
n
=
std::
ios_base
::
hex
)是不可移植的,因为
std::ios_base::fmtflags
不一定能隐式转换为
int
。