定数値のセットまたはそれらの値の任意の組み合わせを表現するために使用できる型を定義します。この特性は通常、整数型、
std::bitset
、または追加の演算子オーバーロードを持つ列挙型(スコープ付きおよびスコープなし)によって実装されます。
要件
ビットマスク型は、有限数のビットマスク要素をサポートします。これらはビットマスク型の非ゼロの異なる値であり、任意のペア
Ci
と
Cj
に対して、
Ci
&
Ci
が非ゼロであり、
Ci
&
Cj
がゼロとなります。さらに、値
0
は、値が設定されていない空のビットマスクを表すために使用されます。
ビット単位演算子
operator
&
、
operator
|
、
operator
^
、
operator~
、
operator
&
=
、
operator
|
=
、および
operator
^
=
はビットマスク型の値に対して定義され、ビットマスク要素が個別の2の整数乗である場合の符号なし整数に対する対応する組み込み演算子と同じ意味論を持ちます。
以下の式は well-formed であり、任意の
BitmaskType
に対して以下の意味を持ちます:
|
式
|
意味
|
|
X
|
=
Y
|
オブジェクト
X
に値
Y
を設定する
|
|
X
&
=
~Y
|
オブジェクト
X
から値
Y
をクリアする
|
|
X
&
Y
|
非ゼロの結果は、オブジェクト
X
に値
Y
が設定されていることを示す
|
各表現可能なビットマスク要素は、ビットマスク型の
n
inline
(C++17以降)
constexpr
値として定義されます。
標準ライブラリ
以下の標準ライブラリ型は
BitmaskType
を満たします:
特定の実装オプションに依存するコード(例:
int
n
=
std::
ios_base
::
hex
)は非移植性です。なぜなら
std::ios_base::fmtflags
が必ずしも
int
に暗黙的に変換可能とは限らないためです。