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

履歴 編集

class template
<ranges>

std::ranges::as_const_view(C++23)

namespace std::ranges {
  template<view V>
    requires input_range<V>
  class as_const_view : public view_interface<as_const_view<V>> { …… }; // (1)

  namespace views {
    inline constexpr /*unspecified*/ as_const = /*unspecified*/;        // (2)
  }
}

概要

  • (1): 各要素を定数化したRangeとして振る舞うview
  • (2): as_const_viewを生成するRangeアダプタオブジェクト

Rangeコンセプト

borrowed sized output input forward bidirectional random_access contiguous common viewable view
  • ※: Vに従う

効果

  • (2): 式views::as_const(E)の効果は次のいずれか(T = decltype((E))U = remove_cvref_t<T>とする)
    • views::all_t<T>constant_rangeのモデルとなる場合 : views::all(E)
    • 任意の型Xに対して、Uempty_view<X>である場合 : auto(views::empty<const X>)
    • 任意の型Xと整数値Extentに対して、Uspan<X, Extent>である場合 : span<const X, Extent>(E)
    • 任意の型Xに対して、Uref_view<X>であり、const Xconstant_rangeのモデルとなる場合 : ref_view(static_cast<const X&>(E.base()))
    • Eが左辺値であり、const Uconstant_rangeのモデルとなり、かつUviewのモデルとならない場合 : ref_view(static_cast<const U&>(E))
    • それ以外の場合 : as_const_view(E)

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++23
base Vの参照を取得する C++23
begin 先頭を指すイテレータを取得する C++23
end 番兵を取得する C++23
size 要素数を取得する C++23

継承しているメンバ関数

名前 説明 対応バージョン
empty Rangeが空かどうかを判定する C++23
operator bool Rangeが空でないかどうかを判定する C++23
front 先頭要素への参照を取得する C++23
back 末尾要素への参照を取得する C++23
operator[] 要素へアクセスする C++23
cbegin 定数イテレータを取得する C++23
cend 定数イテレータ(番兵)を取得する C++23

推論補助

名前 説明 対応バージョン
(deduction_guide) クラステンプレートの推論補助 C++23

#include <ranges>
#include <iostream>

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

  for (auto& i : vec | std::views::as_const) {
    std::cout << i << ' ';

    // 変更不可
    //i = 0
  }
}

出力

1 2 3 4 

バージョン

言語

  • C++23

処理系

参照