Namespaces
Variants

std::ranges:: views:: as_const, std::ranges:: as_const_view

From cppreference.net
Ranges library
Range adaptors
ヘッダーで定義 <ranges>
template < ranges:: view V >

requires ranges:: input_range < V >
class as_const_view

: public ranges:: view_interface < as_const_view < V >>
(1) (C++23以降)
namespace views {

inline constexpr /* 未規定 */ as_const = /* 未規定 */ ;

}
(2) (C++23以降)
呼び出しシグネチャ
template < ranges:: viewable_range R >

requires /* 下記参照 */

constexpr ranges:: view auto as_const ( R && r ) ;
(C++23以降)
1) 基となる view であり、かつ constant_range でもあるビューを表す範囲アダプタ。 as_const_view は常に(空でない場合)読み取り専用の要素を持つ。
2) RangeAdaptorObject とする。 e を部分式、 T decltype ( ( e ) ) U std:: remove_cvref_t < T > とする。このとき式 views :: as_const ( e ) は以下のいずれかと 式等価 である:

as_const_view は常に constant_range をモデル化し、基盤となるビュー V がそれぞれのコンセプトをモデル化する場合、 contiguous_range random_access_range bidirectional_range forward_range borrowed_range common_range 、および sized_range もモデル化します。

目次

データメンバ

メンバー 説明
V base_ (private) 基となるビュー
( 説明専用メンバーオブジェクト* )

メンバー関数

as_const_view を構築する
(public member function)
基になるビュー V を返す
(public member function)
as_const_view の先頭イテレータを返す
(public member function)
as_const_view の終端イテレータを返す
(public member function)
ビューが有界の場合、そのサイズを返す
(public member function)
基になる approximately_sized_range の近似サイズを返す
(public member function)
std::ranges::view_interface から継承
派生ビューが空かどうかを返す( sized_range または forward_range を満たす場合のみ提供)
( std::ranges::view_interface<D> のpublic member function)
(C++23)
範囲の先頭を指す定数イテレータを返す
( std::ranges::view_interface<D> のpublic member function)
(C++23)
範囲の定数イテレータの番兵を返す
( std::ranges::view_interface<D> のpublic member function)
派生ビューが空でないかどうかを返す( ranges::empty が適用可能な場合のみ提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューのデータのアドレスを取得する(そのイテレータ型が contiguous_iterator を満たす場合のみ提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの最初の要素を返す( forward_range を満たす場合に提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの最後の要素を返す( bidirectional_range かつ common_range を満たす場合のみ提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの n 番目 の要素を返す( random_access_range を満たす場合のみ提供)
( std::ranges::view_interface<D> のpublic member function)

std::ranges::as_const_view:: as_const_view

as_const_view ( ) requires std:: default_initializable < V > = default ;
(1) (since C++23)
constexpr explicit as_const_view ( V base ) ;
(2) (since C++23)
1) base_ を値初期化します(デフォルトメンバ初期化子 = V ( ) による)。
2) base_ std :: move ( base ) で初期化します。

パラメータ

base - ビュー

std::ranges::as_const_view:: base

constexpr V base ( ) const & requires std:: copy_constructible < V > ;
(1) (since C++23)
constexpr V base ( ) && ;
(2) (since C++23)

基になるビューを返します。

1) 基になるビューから結果をコピー構築します。 return base_  ; と等価です。
2) 基になるビューから結果をムーブ構築します。 return std :: move ( base_  ) ; と等価です。

std::ranges::as_const_view:: begin

constexpr auto begin ( ) requires ( ! /*simple_view*/ < V > ) ;
(1) (since C++23)
constexpr auto begin ( ) const requires ranges:: range < const V > ;
(2) (since C++23)

ビューの定数イテレータを返します。 return ranges:: cbegin ( base_  ) ; と等価です。

std::ranges::as_const_view:: end

constexpr auto end ( ) requires ( ! /*simple_view*/ < V > ) ;
(1) (since C++23)
constexpr auto end ( ) const requires ranges:: range < const V > ;
(2) (since C++23)

ビューの定数センチネルを返します。 return ranges:: cend ( base_  ) ; と等価です。

std::ranges::as_const_view:: size

constexpr auto size ( ) requires ranges:: sized_range < V > ;
(1) (since C++23)
constexpr auto size ( ) const requires ranges:: sized_range < const V > ;
(2) (since C++23)

ビューが有界である場合、そのサイズを返します。次と等価です: return ranges:: size ( base_  ) ;

std::ranges::as_rvalue_view:: reserve_hint

constexpr auto reserve_hint ( )
requires ranges :: approximately_sized_range < V > ;
(1) (since C++26)
constexpr auto reserve_hint ( ) const
requires ranges :: approximately_sized_range < const V > ;
(2) (since C++26)

base_  ) を返します。

推論ガイド

template < class R >
as_const_view ( R && ) - > as_const_view < views:: all_t < R >> ;
(C++23以降)

ヘルパーテンプレート

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: as_const_view < T >> =

ranges:: enable_borrowed_range < T > ;
(C++23以降)

この ranges::enable_borrowed_range の特殊化は、基になるビューが borrowed_range を満たす場合に、 as_const_view borrowed_range を満たすようにする。

注記

機能テスト マクロ 標準 機能
__cpp_lib_ranges_as_const 202207L (C++23) ranges::as_const_view , std:: const_iterator
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range および reserve_hint

#include <cassert>
#include <ranges>
int main()
{
    int x[]{1, 2, 3, 4, 5};
    auto v1 = x | std::views::drop(2);
    assert(v1.back() == 5);
    v1[0]++; // OK: 非const要素は変更可能
    auto v2 = x | std::views::drop(2) | std::views::as_const;
    assert(v2.back() == 5);
    // v2[0]++; // コンパイル時エラー: 読み取り専用要素は変更不可
}

関連項目

各要素を右辺値にキャストするシーケンスの view
(クラステンプレート) (範囲アダプタオブジェクト)
読み取り専用範囲の先頭を指すイテレータを返す
(カスタマイゼーションポイントオブジェクト)
読み取り専用範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト)
(C++17)
引数への const 参照を取得する
(関数テンプレート)
イテレータを定数イテレータに変換するイテレータアダプタ
(クラステンプレート)