最終更新日時(UTC):
が更新

履歴 編集

class
<bitset>

std::bitset::reference

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");
}

出力

参照