Namespaces
Variants

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

cppreference.net에서
 
 
범위 라이브러리
범위 어댑터
 
헤더 <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 /* see below */
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)은(는) 다음과 같이 표현식-동등합니다:
  • views::all(e), 이는 올바른 표현식이고 views::all_t<T>가 constant_range를 모델링하는 경우;
  • 그렇지 않으면, std::span<const X, Extent>(e) (단, 일부 타입 X 및 일부 확장 Extent에 대해 U이 std::span<X, Extent>을 나타내는 경우);
  • 그렇지 않으면, ranges::ref_view(static_cast<const X&>(e.base())) (단, U이 일부 타입 ranges::ref_view<X>에 대해 X을 나타내고 const X이 constant_range를 모델링하는 경우);
  • 그렇지 않으면, ranges::ref_view(static_cast<const U&>(e)) (단, e이 lvalue이고, const U가 constant_range를 모델링하며, U가 view를 모델링하지 않는 경우);
  • 그렇지 않으면, as_const_view{e}.

as_const_view는 항상 constant_range를 모델링하며, 기본 뷰 가 각각의 컨셉을 모델링할 때 contiguous_range, random_access_range, bidirectional_range, forward_range, borrowed_range, common_range, sized_rangeV를 모델링합니다.

데이터 멤버

멤버 설명
V base_ (private) 기반 뷰
( 설명 전용 멤버 객체* )

멤버 함수

as_const_view 를 생성함
(public 멤버 함수)
기본 뷰 V 를 반환함
(public 멤버 함수)
as_const_view 의 시작 반복자를 반환함
(public 멤버 함수)
as_const_view 의 끝 반복자를 반환함
(public 멤버 함수)
뷰의 크기를 반환함 (경계가 지정된 경우에만)
(public 멤버 함수)
기본 approximately_sized_range 의 대략적인 크기를 반환함
(public 멤버 함수)
다음으로부터 상속됨 ranges::view_interface
파생 뷰가 비어 있는지 여부를 반환하며, 다음 조건을 만족하는 경우에만 제공됨: sized_range 또는 forward_range
(std::ranges::view_interface<D>의 공개 멤버 함수)
(C++23)
범위의 시작에 대한 상수 반복자를 반환함
(std::ranges::view_interface<D>의 공개 멤버 함수)
(C++23)
범위의 상수 반복자에 대한 센티널을 반환함
(std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰가 비어 있지 않은지 여부를 반환하며, ranges::empty가 적용 가능한 경우에만 제공됨
(std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰의 데이터 주소를 가져오며, 반복자 유형이 contiguous_iterator
를 만족하는 경우에만 제공됨 (std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰의 첫 번째 요소를 반환하며, forward_range
를 만족하는 경우 제공됨 (std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰의 마지막 요소를 반환하며, bidirectional_range와 common_range
를 모두 만족하는 경우에만 제공됨 (std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰의 n번째 요소를 반환하며, random_access_range
를 만족하는 경우에만 제공됨 (std::ranges::view_interface<D>의 공개 멤버 함수)

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 참조를 얻음
(함수 템플릿)
반복자를 상수 반복자로 변환하는 반복자 어댑터
(클래스 템플릿)