名前付き要件:BitmaskType
提供: cppreference.com
定数値またはそれらの値の任意の組み合わせの集合を表すために使用できる型を定義します。 この特性は一般的には整数型、 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)!=0 | オブジェクト X 内の値 Y がセットされていることを表します。 |
それぞれの表現可能なビットマスク要素はそのビットマスク型の 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以上)
std::ios_base::fmtflags は int に暗黙に変換可能であるとは限らないため、何らかの特定の実装のオプションに依存するコード (例えば int n =std::ios_base::hex) は移植性がありません。