Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
ヘッダーで定義 <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 /* 未規定 */ as_rvalue = /* 未規定 */ ;

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

requires /* 下記参照 */

constexpr ranges:: view auto as_rvalue ( R && r ) ;
(C++23以降)
1) 基となる view の要素がrvalueであるビューを表す範囲アダプタ。
2) RangeAdaptorObject とする。 e を部分式とし、 T decltype ( ( e ) ) とする。このとき、式 views :: as_rvalue ( e ) は以下のいずれかと 式等価 である:

目次

データメンバ

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

メンバー関数

as_rvalue_view を構築する
(public member function)
基になるビュー V を返す
(public member function)
as_rvalue_view の先頭イテレータを返す
(public member function)
as_rvalue_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)
派生ビューの最初の要素を返す( forward_range を満たす場合に提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの最後の要素を返す( bidirectional_range かつ common_range を満たす場合にのみ提供)
( std::ranges::view_interface<D> のpublic member function)
派生ビューの n th 番目の要素を返す( random_access_range を満たす場合にのみ提供)
( std::ranges::view_interface<D> のpublic member function)

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) (C++23以降)
constexpr auto end ( ) const requires ranges:: range < const V > ;
(2) (C++23以降)

(1) V または (2) const V common_range をモデル化する場合、 std:: move_iterator ( ranges:: end ( base_  ) ) を返します。

それ以外の場合、 std:: move_sentinel ( ranges:: end ( base_  ) ) を返します。

(注:指定されたテキストブロック内に翻訳対象の実際のテキスト内容が含まれていないため、HTML構造のみを保持した状態で返答しています。span要素内が空であるため、翻訳すべきテキストが存在しません。)

std::ranges::as_rvalue_view:: size

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

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

(注:元のテキストには翻訳すべき可読テキストが含まれていないため、HTML構造のみを保持しています)

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_  ) を返します。

推論ガイド

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 の特殊化は、基盤となるビューが borrowed_range を満たす場合に、 as_rvalue_view がそれを満たすようにする。

注記

機能テスト マクロ 標準 機能
__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)
オブジェクトをデリファレンスした結果を、関連付けられた右辺値参照型にキャストする
(カスタマイゼーションポイントオブジェクト)
右辺値にデリファレンスするイテレータアダプタ
(クラステンプレート)
std::move_iterator のためのセンチネルアダプタ
(クラステンプレート)
view constant_range に変換する
(クラステンプレート) (レンジアダプタオブジェクト)