定義了一種型別,該型別可用於表示一組常量值或這些值的任意組合。此特性通常由整數型別、std::bitset 或帶有額外運算子過載的列舉(有作用域和無作用域)實現。
[編輯] 要求
位掩碼型別支援有限數量的位掩碼元素,這些元素是位掩碼型別中不同的非零值,使得對於任意一對 Ci 和 Cj,Ci & 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
依賴於某些特定實現選項的程式碼(例如 int n = std::ios_base::hex)是不可移植的,因為 std::ios_base::fmtflags 不一定能隱式轉換為 int。