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

履歴 編集

function
<iterator>

std::basic_const_iterator::コンストラクタ(C++23)

constexpr basic_const_iterator() requires default_initializable<Iterator> = default;  // (1)

constexpr basic_const_iterator(Iterator current);                                     // (2)

template<convertible_to<Iterator> U>
constexpr basic_const_iterator(basic_const_iterator<U> current);                      // (3)

template<different-from<basic_const_iterator> T>
  requires convertible_to<T, Iterator>
constexpr basic_const_iterator(T&& current);                                          // (4)

概要

basic_const_iteratorオブジェクトを構築する。

効果

ラップするイテレータをcurrent_というメンバに保持するとして

  • (1) : current_デフォルト構築する
  • (2) : current_std::move(current)で初期化する
  • (3) : current_std::move(current.current_)で初期化する
  • (4) : current_std::forward<T>(current)で初期化する

#include <iterator>
#include <vector>

// 例示のための単純なイテレータラッパ、ラップするイテレータへの暗黙変換を提供する
template<typename I>
struct wrap_iter {
  I it;

  operator I() const {
    return it;
  }
};

int main() {
  using I = std::vector<int>::iterator;

  std::vector<int> vec = {1, 2, 3, 4, 5};

  // (1) デフォルトコンストラクタ
  std::basic_const_iterator<I> ci1{};

  // (2) イテレータから構築
  std::basic_const_iterator ci2{vec.begin()};

  // (3) 別のbasic_const_iteratorから変換して構築(コピーコンストラクタ)
  std::basic_const_iterator<I> ci3{ci2};

  wrap_iter wrap{ci2};
  // (4) Iteratorに変換可能な型から構築
  std::basic_const_iterator<I> ci4{wrap};
}

出力

バージョン

言語

  • C++23

処理系

参照