C++ 概念: BitmaskType

来自cppreference.com
< cpp‎ | concept
 
 
 

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

[编辑] 要求

位掩码类型支持有限数量的位掩码元素,它们拥有各不相同的位掩码类型的非零值,满足对于任意对 Ci 与 Cj , Ci & Ci != 0Ci & Cj == 0 。另外,值 0 用于表示空位掩码,而无值集合。

逐位运算符 operator&operator|operator^operator~operator&=operator|=operator^= 对位掩码类型的值定义,且拥有无符号整数上会有的对应内建运算符的相同语义,若位掩码元素为相异的二的幂。

对任何位掩码类型(BitmaskType),下列表达式为良态且拥有下列含义

X |= Y 在对象 X 中设置值 Y
X &= ~Y 在对象 X 中清除值 Y
(X&Y) != 0 指示值 Y 已设置于对象 X

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

[编辑] 用法

下列标准库类型满足位掩码类型BitmaskType):

  • std::ctype_base::mask
  • std::ios_base::fmtflags
  • std::ios_base::iostate
  • std::ios_base::openmode
  • std::regex_traits::char_class_type (C++11 起)
  • std::regex_constants::syntax_option_type (C++11 起)
  • std::regex_constants::match_flag_type (C++11 起)
  • std::launch (C++11 起)
  • std::filesystem::perms (C++17 起)
  • std::filesystem::copy_options (C++17 起)
  • std::filesystem::directory_options (C++17 起)

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