Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <ranges>
template < ranges:: view V >

requires ranges:: input_range < V >
class as_rvalue_view

: public ranges:: view_interface < as_rvalue_view < V >>
(1) (depuis C++23)
namespace views {

inline constexpr /* non spécifié */ as_rvalue = /* non spécifié */ ;

}
(2) (depuis C++23)
Signature d'appel
template < ranges:: viewable_range R >

requires /* voir ci-dessous */

constexpr ranges:: view auto as_rvalue ( R && r ) ;
(depuis C++23)
1) Un adaptateur de gamme qui représente une vue de la view sous-jacente dont les éléments sont des rvalues.
2) RangeAdaptorObject . Soit e une sous-expression et soit T égal à decltype ( ( e ) ) . Alors l'expression views :: as_rvalue ( e ) est équivalente-expression à :

Table des matières

Membres de données

Membre Description
V base_ (privé) la vue sous-jacente
( objet membre d'exposition uniquement* )

Fonctions membres

construit un as_rvalue_view
(fonction membre publique)
retourne la vue sous-jacente V
(fonction membre publique)
retourne l'itérateur de début du as_rvalue_view
(fonction membre publique)
retourne l'itérateur de fin du as_rvalue_view
(fonction membre publique)
retourne la taille de la vue si elle est bornée
(fonction membre publique)
retourne la taille approximative du approximately_sized_range sous-jacent
(fonction membre publique)
Hérité de std::ranges::view_interface
indique si la vue dérivée est vide, fourni uniquement si elle satisfait sized_range ou forward_range
(fonction membre publique de std::ranges::view_interface<D> )
(C++23)
retourne un itérateur constant vers le début de la plage
(fonction membre publique de std::ranges::view_interface<D> )
(C++23)
retourne un sentinelle pour l'itérateur constant de la plage
(fonction membre publique de std::ranges::view_interface<D> )
indique si la vue dérivée n'est pas vide, fourni uniquement si ranges::empty lui est applicable
(fonction membre publique de std::ranges::view_interface<D> )
retourne le premier élément de la vue dérivée, fourni si elle satisfait forward_range
(fonction membre publique de std::ranges::view_interface<D> )
retourne le dernier élément de la vue dérivée, fourni uniquement si elle satisfait bidirectional_range et common_range
(fonction membre publique de std::ranges::view_interface<D> )
retourne le n ème élément de la vue dérivée, fourni uniquement si elle satisfait random_access_range
(fonction membre publique de 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) Initialise la valeur de base_ via son initialiseur de membre par défaut ( = V ( ) ).
2) Initialise base_ avec std :: move ( base ) .

Paramètres

base - une vue

std::ranges::as_rvalue_view:: base

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

Retourne la vue sous-jacente.

1) Construit par copie le résultat à partir de la vue sous-jacente. Équivalent à return base_  ; .
2) Construit par déplacement le résultat à partir de la vue sous-jacente. Équivalent à return std :: move ( base_  ) ; .

std::ranges::as_rvalue_view:: begin

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

Retourne std:: move_iterator ( ranges:: begin ( base_  ) ) .

std::ranges::as_rvalue_view:: end

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

Retourne std:: move_iterator ( ranges:: end ( base_  ) ) si (1) V ou (2) const V modélise common_range .

Retourne std:: move_sentinel ( ranges:: end ( base_  ) ) sinon.

std::ranges::as_rvalue_view:: size

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

Retourne la taille de la vue si celle-ci est bornée. Équivalent à return ranges:: size ( base_  ) ; .

std::ranges::as_rvalue_view:: reserve_hint

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

Retourne ranges :: reserve_hint ( base_  ) .

Guides de déduction

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

Modèles d'assistance

template < class T >

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

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

Cette spécialisation de ranges::enable_borrowed_range permet à as_rvalue_view de satisfaire borrowed_range lorsque la vue sous-jacente la satisfait.

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__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 et reserve_hint

Exemple

#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)); // déplacer les chaînes de words vers new_words
    auto quoted = std::views::transform([](auto&& s) { return "“" + s + "”"; });
    std::cout << "Anciens mots : ";
    for (auto&& word : words | std::views::as_rvalue | quoted)
        std::cout << word << ' ';
    std::cout << "\nNouveaux mots : ";
    for (auto&& word : new_words | std::views::as_rvalue | quoted)
        std::cout << word << ' ';
}

Sortie possible :

Anciens mots : “” “” “” “” “” “” “” 
Nouveaux mots : “Quick” “red” “🦊” “jumped” “over” “a” “pterodactyl”

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 4083 C++23 views::as_rvalue acceptait les plages non-input rejeté

Voir aussi

(C++20)
convertit le résultat du déréférencement d'un objet en son type de référence rvalue associé
(objet de point de personnalisation)
adaptateur d'itérateur qui déréférence en une rvalue
(modèle de classe)
adaptateur de sentinelle pour std::move_iterator
(modèle de classe)
convertit une view en une constant_range
(modèle de classe) (objet adaptateur de gamme)