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
処理系
- Clang: ??
- GCC: 13.1 ✅
- Visual C++: 2022 Update 6 ✅