namespace std {
template <size_t N>
class bitset {
public:
class reference {
friend class bitset;
CONSTEXPR reference() noexcept;
public:
CONSTEXPR ~reference() noexcept;
CONSTEXPR reference& operator=(bool x) noexcept;
CONSTEXPR reference& operator=(const reference&) noexcept;
constexpr const reference& operator=(bool x) const noexcept; // C++26
CONSTEXPR bool operator~() const noexcept;
CONSTEXPR operator bool() const noexcept;
CONSTEXPR reference& flip() noexcept;
friend constexpr void swap(reference x, reference y) noexcept; // C++26
friend constexpr void swap(reference x, bool& y) noexcept; // C++26
friend constexpr void swap(bool& x, reference y) noexcept; // C++26
};
};
}
概要
bitset::referenceは、bitsetの各ビットにアクセスするためのプロキシクラスである。bitset::operator[]で返されるビット情報を取得、書き換えるためにある。
C++23からbitset::reference全メンバ関数へのconstexpr指定が行われる。
C++26から、const修飾された*thisに対するboolからの代入演算子と、ADLで見つかる非メンバswap関数が追加され、vector<bool>::referenceとインタフェースが統一された。
メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator=(bool x) |
ビット情報を書き換える | |
operator=(const reference&) |
ビット情報をコピーする | |
operator=(bool x) const |
constな*thisのビット情報を書き換える |
C++26 |
operator~() |
反転したビットを取得する | |
operator bool() |
bool型に変換する |
|
flip() |
ビットを反転させる |
非メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
swap(reference x, reference y) |
2つの参照先のビットを入れ替える | C++26 |
swap(reference x, bool& y) |
参照先のビットとboolを入れ替える |
C++26 |
swap(bool& x, reference y) |
boolと参照先のビットを入れ替える |
C++26 |
例
#include <cassert>
#include <bitset>
int main()
{
std::bitset<4> bs("1010");
bs[0] = true; // 書き換え
assert(bs.to_string() == "1011");
// 反転したビットを取得
bool result1 = ~bs[3];
assert(!result1);
// boolへの変換
bool result2 = bs[3];
assert(result2);
// ビットを反転させる
bs[0].flip();
assert(bs.to_string() == "1010");
}
出力
参照
- P2417R2 A more constexpr bitset
- P3612R1 Harmonize proxy-reference operations (LWG 3638 and 4187)
- C++26で、
const修飾された*thisに対するboolからの代入演算子と、ADLで見つかる非メンバswap関数が追加された
- C++26で、