Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque de plages
Adaptateurs de plages
 
Défini dans l'en-tête <ranges>
template< ranges::view V >
    requires ranges::input_range<V>
class as_const_view
    : public ranges::view_interface<as_const_view<V>>
(1) (depuis C++23)
namespace views {
    inline constexpr /* unspecified */ as_const = /* unspecified */;
}
(2) (depuis C++23)
Signature d'appel
template< ranges::viewable_range R >
    requires /* see below */
constexpr ranges::view auto as_const( R&& r );
(depuis C++23)
1) Un adaptateur de plage qui représente une vue de la view sous-jacente qui est également un constant_range. Un as_const_view a toujours des éléments en lecture seule (s'il n'est pas vide).
2) RangeAdaptorObject. Soit e une sous-expression, soit T soit decltype((e)), et soit U soit std::remove_cvref_t<T>. Alors l'expression views::as_const(e) est expression-equivalent à :
  • views::all(e), si c'est une expression bien formée et views::all_t<T> modélise constant_range ;
  • sinon, std::span<const X, Extent>(e) pour un certain type X et une certaine étendue Extent si U désigne std::span<X, Extent> ;
  • sinon, ranges::ref_view(static_cast<const X&>(e.base())) si U désigne ranges::ref_view<X> pour un certain type X et const X modélise constant_range ;
  • sinon, ranges::ref_view(static_cast<const U&>(e)) si e est une lvalue, const U modélise constant_range, et U ne modélise pas view.
  • sinon, as_const_view{e}.

as_const_view modélise toujours constant_range, et il modélise contiguous_range, random_access_range, bidirectional_range, forward_range, borrowed_range, common_range, et sized_range lorsque la vue sous-jacente V modélise les concepts respectifs.

Membres de données

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

Fonctions membres

construit un as_const_view
(fonction membre publique)
retourne la vue sous-jacente V
(fonction membre publique)
retourne l'itérateur de début du as_const_view
(fonction membre publique)
retourne l'itérateur de fin du as_const_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 ranges::view_interface
retourne si la vue dérivée est vide, à condition qu'elle satisfasse 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 une sentinelle pour l'itérateur constant de la plage
(fonction membre publique de std::ranges::view_interface<D>)
retourne si la vue dérivée n'est pas vide, à condition que ranges::empty lui soit applicable
(fonction membre publique de std::ranges::view_interface<D>)
obtient l'adresse des données de la vue dérivée, à condition que son type d'itérateur satisfasse contiguous_iterator
(fonction membre publique de std::ranges::view_interface<D>)
retourne le premier élément dans la vue dérivée, à condition qu'elle satisfasse forward_range
(fonction membre publique de std::ranges::view_interface<D>)
retourne le dernier élément dans la vue dérivée, à condition qu'elle satisfasse bidirectional_range et common_range
(fonction membre publique de std::ranges::view_interface<D>)
retourne le nième élément dans la vue dérivée, à condition qu'elle satisfasse random_access_range
(fonction membre publique de 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) 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_const_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_const_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 l'itérateur constant de la vue. Équivalent à return ranges:: cbegin ( base_  ) ; .

std::ranges::as_const_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 le sentinelle constant de la vue. Équivalent à return ranges:: cend ( base_  ) ; .

std::ranges::as_const_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_const_view ( R && ) - > as_const_view < views:: all_t < R >> ;
(depuis C++23)

Modèles d'assistance

template < class T >

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

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

Cette spécialisation de ranges::enable_borrowed_range permet à as_const_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_const 202207L (C++23) ranges::as_const_view , std:: const_iterator
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range et reserve_hint

Exemple

#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, peut modifier un élément non-const
    auto v2 = x | std::views::drop(2) | std::views::as_const;
    assert(v2.back() == 5);
    // v2[0]++; // Erreur de compilation, ne peut pas modifier un élément en lecture seule
}

Voir aussi

une view d'une séquence qui convertit chaque élément en rvalue
(modèle de classe) (objet adaptateur de gamme)
retourne un itérateur vers le début d'une gamme en lecture seule
(objet point de personnalisation)
retourne un sentinelle indiquant la fin d'une gamme en lecture seule
(objet point de personnalisation)
(C++17)
obtient une référence const vers son argument
(modèle de fonction)
adaptateur d'itérateur qui convertit un itérateur en itérateur constant
(modèle de classe)