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 /* unspecified */ as_const = /* unspecified */ ;

}
(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 를 부분식(subexpression)으로 하고, T decltype ( ( e ) ) 로, U std:: remove_cvref_t < T > 로 정의하자. 그러면 표현식 views :: as_const ( e ) 는 다음 중 하나와 표현식 동등(expression-equivalent) 하다:

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 멤버 함수)
기본 뷰 V 를 반환함
(public 멤버 함수)
as_const_view 의 시작 반복자를 반환함
(public 멤버 함수)
as_const_view 의 끝 반복자를 반환함
(public 멤버 함수)
뷰의 크기를 반환함 (경계가 지정된 경우에만)
(public 멤버 함수)
기본 approximately_sized_range 의 대략적인 크기를 반환함
(public 멤버 함수)
std::ranges::view_interface 로부터 상속됨
파생 뷰가 비어 있는지 여부를 반환함 ( sized_range 또는 forward_range 를 만족하는 경우에만 제공됨)
( std::ranges::view_interface<D> 의 public 멤버 함수)
(C++23)
범위의 시작을 가리키는 상수 반복자를 반환함
( std::ranges::view_interface<D> 의 public 멤버 함수)
(C++23)
범위의 상수 반복자에 대한 sentinel을 반환함
( std::ranges::view_interface<D> 의 public 멤버 함수)
파생 뷰가 비어 있지 않은지 여부를 반환함 ( ranges::empty 가 적용 가능한 경우에만 제공됨)
( std::ranges::view_interface<D> 의 public 멤버 함수)
파생 뷰의 데이터 주소를 얻음 (반복자 타입이 contiguous_iterator 를 만족하는 경우에만 제공됨)
( std::ranges::view_interface<D> 의 public 멤버 함수)
파생 뷰의 첫 번째 요소를 반환함 ( forward_range 를 만족하는 경우에만 제공됨)
( std::ranges::view_interface<D> 의 public 멤버 함수)
파생 뷰의 마지막 요소를 반환함 ( bidirectional_range common_range 를 만족하는 경우에만 제공됨)
( std::ranges::view_interface<D> 의 public 멤버 함수)
파생 뷰의 n 번째 요소를 반환함 ( random_access_range 를 만족하는 경우에만 제공됨)
( std::ranges::view_interface<D> 의 public 멤버 함수)

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) (C++23 이후)
constexpr auto end ( ) const requires ranges:: range < const V > ;
(2) (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) (C++26부터)
constexpr auto reserve_hint ( ) const
requires ranges :: approximately_sized_range < const V > ;
(2) (C++26부터)

ranges :: reserve_hint ( 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 의 이 특수화는 기본 뷰가 이를 만족할 때 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]++; // 컴파일 타임 오류, 읽기 전용 요소 수정 불가
}

참고 항목

각 요소를 rvalue로 캐스팅하는 시퀀스의 view
(클래스 템플릿) (범위 어댑터 객체)
읽기 전용 범위의 시작을 가리키는 반복자를 반환함
(커스터마이제이션 포인트 객체)
읽기 전용 범위의 끝을 나타내는 센티널을 반환함
(커스터마이제이션 포인트 객체)
(C++17)
인자에 대한 const 참조를 얻음
(함수 템플릿)
반복자를 상수 반복자로 변환하는 반복자 어댑터
(클래스 템플릿)