定数値のセット、またはそれらの値の任意の組み合わせを表すために使用できる型を定義します。この特性は通常、整数型、std::bitset、または追加の演算子オーバーロードを持つ列挙型(スコープあり、スコープなし)によって実装されます。
[編集] 要件
ビットマスク型は、有限個のビットマスク要素をサポートします。ビットマスク要素とは、ビットマスク型の区別される非ゼロの値であり、任意のペア Ci および Cj に対して、Ci & Ci はゼロでなく、Ci & Cj はゼロであるような値です。さらに、値 0 は、値が設定されていない空のビットマスクを表すために使用されます。
ビット演算子 operator&、operator|、operator^、operator~、operator&=、operator|=、および operator^= は、ビットマスク型の値に対して定義されており、ビットマスク要素が2のべき乗に相当する整数である場合、対応する組み込み演算子と同じ意味論を持ちます。
任意の BitmaskType に対して、以下の式は well-formed であり、以下の意味を持ちます。
| 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 に暗黙的に変換可能ではないためです。