Skip to content

Latest commit

 

History

History
95 lines (69 loc) · 3.09 KB

op_constructor.md

File metadata and controls

95 lines (69 loc) · 3.09 KB

コンストラクタ

  • iterator[meta header]
  • std[meta namespace]
  • common_iterator[meta class]
  • function[meta id-type]
  • cpp20[meta cpp]
constexpr common_iterator() requires default_initializable<I> = default;  // (1)

constexpr common_iterator(I i);                               // (2)

constexpr common_iterator(S s);                               // (3)

template<class I2, class S2>
  requires convertible_to<const I2&, I> &&
           convertible_to<const S2&, S>
constexpr common_iterator(const common_iterator<I2, S2>& x);  // (4)
  • default_initializable[link /reference/concepts/default_initializable.md]
  • convertible_to[link /reference/concepts/convertible_to.md]

概要

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

事前条件

効果

I, Sの値のどちらかをvariant<I, S>型のメンバ変数v_に保持するとする。

  • (1) : v_をデフォルト構築(Iをデフォルト構築して初期化)する。
  • (2) : v_{in_place_type<I>, std::move(i)}が行われたかのようにv_を初期化する。
  • (3) : v_{in_place_type<S>, std::move(s)}が行われたかのようにv_を初期化する。
  • (4) : i = x.v_.index()として、v_{in_place_index<i>, get<i>(x.v_)}が行われたかのようにv_を初期化する。

#include <iostream>
#include <iterator>
#include <ranges>

int main() {
  auto seq = std::views::iota(1) | std::views::take(5);

  using CI = std::common_iterator<std::ranges::iterator_t<decltype(seq)>, std::ranges::sentinel_t<decltype(seq)>>;

  auto i = std::ranges::begin(seq);
  auto s = std::ranges::end(seq);

  // (1) デフォルトコンストラクタ
  CI ci1{};

  // (2) イテレータから構築
  CI ci2{i};

  // (3) 番兵から構築
  CI ci3{s};

  // (3) コピーコンストラクタ
  CI ci4{ci2};
}
  • std::common_iterator[color ff0000]
  • views::iota[link /reference/ranges/iota_view.md]
  • views::take[link /reference/ranges/take_view.md]
  • iterator_t[link /reference/ranges/iterator_t.md]
  • sentinel_t[link /reference/ranges/sentinel_t.md]
  • ranges::begin[link /reference/ranges/begin.md]
  • ranges::end[link /reference/ranges/end.md]

出力

バージョン

言語

  • C++20

処理系

関連項目

参照