命名空间
变体
操作

C++ 命名要求: BitmaskType

来自 cppreference.cn
< 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 非零结果表示值 Y 在对象 X 中已设置

每个可表示的位掩码元素都定义为位掩码类型的n 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