命名空间
变体
操作

C++ 命名要求: BitmaskType

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
随机数
并发
(C++11)
Ranges
多维视图
其他

 

定义了一种类型,该类型可用于表示一组常量值或这些值的任意组合。此特性通常由整数类型、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

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

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