Skip to content

Latest commit

 

History

History
83 lines (64 loc) · 2.72 KB

op_constructor.md

File metadata and controls

83 lines (64 loc) · 2.72 KB

コンストラクタ

  • ranges[meta header]
  • std::ranges[meta namespace]
  • iota_view[meta class]
  • function[meta id-type]
  • cpp20[meta cpp]
// (1)
iota_view() = default;

// (2)
constexpr explicit iota_view(W value);

// (3)
constexpr iota_view(type_identity_t<W> value, type_identity_t<Bound> bound);

// (4)
constexpr iota_view(iterator first, sentinel last);
  • iota_view[link ../iota_view.md]
  • type_identity_t[link /reference/type_traits/type_identity.md]
  • iterator[link iterator.md]
  • sentinel[link sentinel.md]

概要

  • (1) : [W(), Bound()) を範囲とするiota_viewを構築する
  • (2) : [value, Bound()) を範囲とするiota_viewを構築する
  • (3) : [value, bound) を範囲とするiota_viewを構築する
  • (4) : イテレータ [first, last) が指す値を範囲とするiota_viewを構築する((3)に委譲)

Boundunreachable_sentinel_tのとき、無限長のiota_viewとなる。

事前条件

ebから到達できるとは、bをn回インクリメントしたとき、e == bが真となるようなnが存在することをいう。

効果

iota_viewが内部で保持する先頭と終端の値を引数で初期化する。

#include <ranges>

int main()
{
  // 無限長
  constexpr std::ranges::iota_view iota1{0};
  static_assert(not std::ranges::sized_range<decltype(iota1)>);
  static_assert(iota1.front() == 0);

  // 1引数だが、Boundがintなので、範囲は [-5, int()) すなわち [-5, 0) となり有限長
  constexpr std::ranges::iota_view<int, int> iota2{-5};
  static_assert(std::ranges::size(iota2) == 5);

  // iota_viewの部分範囲
  constexpr std::ranges::iota_view iota3{0, 10};
  constexpr decltype(iota3) sub{iota3.begin() + 3, iota3.end()};
  static_assert(sub.front() == 3);
}

出力

バージョン

言語

  • C++20

処理系

  • Clang: 13.0.0 [mark verified]
  • GCC: 10.1.0 [mark verified]
  • ICC: ?
  • Visual C++: 2019 Update 10 [mark verified]

参照