Namespaces
Variants

std::ranges::views::as_rvalue, std::ranges::as_rvalue_view

cppreference.net에서
 
 
Ranges 라이브러리
Range 어댑터
 
헤더 <ranges>
template< ranges::view V >
    requires ranges::input_range<V>
class as_rvalue_view
    : public ranges::view_interface<as_rvalue_view<V>>
에 정의됨 (1) (C++23 이후)
namespace views {
    inline constexpr /* unspecified */ as_rvalue = /* unspecified */;
}
(2) (C++23 이후)
호출 서명
template< ranges::viewable_range R >
    requires /* see below */
constexpr ranges::view auto as_rvalue( R&& r );
(C++23 이후)
1) 기본 뷰의 요소를 rvalue로 나타내는 뷰를 만드는 range 어댑터.
2) RangeAdaptorObject. e를 부분 표현식이라고 하고 T를 decltype((e))라고 하자. 그러면 표현식 views::as_rvalue(e)은 표현식-동등(expression-equivalent)하게 다음과 같다:
  • views::all(e), 만약 그것이 올바른 형식의 표현식이고, T가 input_range를 모델링하며, std::same_as<ranges::range_rvalue_reference_t<T>, ranges::range_reference_t<T>>가 true이면;
  • as_rvalue_view{e} 그렇지 않으면.

데이터 멤버

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

멤버 함수

as_rvalue_view 를 생성합니다
(public 멤버 함수)
기본 뷰 V 를 반환합니다
(public 멤버 함수)
as_rvalue_view 의 시작 반복자를 반환합니다
(public 멤버 함수)
as_rvalue_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)
범위의 상수 반복자에 대한 종점(sentinel)을 반환합니다.
(std::ranges::view_interface<D>의 공개 멤버 함수)
파생된 뷰가 비어 있지 않은지 여부를 반환합니다. 오직 ranges::empty가 적용 가능한 경우에만 제공됩니다.
(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_rvalue_view:: as_rvalue_view

as_rvalue_view ( ) requires std:: default_initializable < V > = default ;
(1) (since C++23)
constexpr explicit as_rvalue_view ( V base ) ;
(2) (since C++23)
1) 기본 멤버 초기화자( = V ( ) )를 통해 base_ 를 값 초기화합니다.
2) base_ 를 std :: move ( base ) 로 초기화합니다.

매개변수

base - 뷰

std::ranges::as_rvalue_view:: base

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

기본 뷰를 반환합니다.

1) 기본 뷰에서 결과를 복사 생성합니다. return base_  ; 와 동일합니다.
2) 기본 뷰에서 결과를 이동 생성합니다. return std :: move ( base_  ) ; 와 동일합니다.

std::ranges::as_rvalue_view:: begin

constexpr auto begin ( ) requires ( ! /*simple-view*/ < V > ) ;
(1) (C++23 이후)
constexpr auto begin ( ) const requires ranges:: range < const V > ;
(2) (C++23 이후)

base_ 에 대한 ranges:: begin ( 결과로 std:: move_iterator ( 를 반환합니다 ) ) .

std::ranges::as_rvalue_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)

V 또는 (2) 의 경우 const V 가 common_range 를 모델링하면 std:: move_iterator ( ranges:: end ( base_  ) ) 를 반환합니다.

그렇지 않으면 std:: move_sentinel ( ranges:: end ( base_  ) ) 를 반환합니다.

std::ranges::as_rvalue_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부터)

base_ 에 대한 ranges :: reserve_hint (  ) 를 반환합니다.

추론 가이드

template < class R >
as_rvalue_view ( R && ) - > as_rvalue_view < views:: all_t < R >> ;
(C++23부터)

헬퍼 템플릿

template < class T >

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

ranges:: enable_borrowed_range < T > ;
(C++23부터)

ranges::enable_borrowed_range 의 이 특수화는 기본 뷰가 이를 만족할 때 as_rvalue_view 가 borrowed_range 를 만족하도록 합니다.

참고 사항

기능 테스트 매크로 값 표준 기능
__cpp_lib_ranges_as_rvalue 202207L (C++23) std::ranges::as_rvalue_view
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range 및 reserve_hint

예제

#include <algorithm>
#include <iostream>
#include <ranges>
#include <string>
#include <vector>
int main()
{
    std::vector<std::string> words =
        {"Quick", "red", "\N{FOX FACE}", "jumped", "over", "a", "pterodactyl"};
    std::vector<std::string> new_words;
    std::ranges::copy(
        words | std::views::as_rvalue,
        std::back_inserter(new_words)); // words에서 new_words로 문자열 이동
    auto quoted = std::views::transform([](auto&& s) { return "“" + s + "”"; });
    std::cout << "Old words: ";
    for (auto&& word : words | std::views::as_rvalue | quoted)
        std::cout << word << ' ';
    std::cout << "\nNew words: ";
    for (auto&& word : new_words | std::views::as_rvalue | quoted)
        std::cout << word << ' ';
}

가능한 출력:

Old words: “” “” “” “” “” “” “” 
New words: “Quick” “red” “🦊” “jumped” “over” “a” “pterodactyl”

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 4083 C++23 views::as_rvalue 가 비-입력 범위를 수락했음 거부하도록 변경됨

참고 항목

(C++20)
객체를 역참조한 결과를 해당 rvalue 참조 타입으로 변환
(커스터마이제이션 포인트 객체)
rvalue로 역참조하는 반복자 어댑터
(클래스 템플릿)
std::move_iterator 를 위한 센티넬 어댑터
(클래스 템플릿)
view 를 constant_range 로 변환
(클래스 템플릿) (레인지 어댑터 객체)