Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Definido en el encabezado <ranges>
template < ranges:: view V >

requires ranges:: input_range < V >
class as_const_view

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

inline constexpr /* no especificado */ as_const = /* no especificado */ ;

}
(2) (desde C++23)
Firma de llamada
template < ranges:: viewable_range R >

requires /* ver más abajo */

constexpr ranges:: view auto as_const ( R && r ) ;
(desde C++23)
1) Un adaptador de rango que representa una vista del view subyacente que también es un constant_range . Un as_const_view siempre tiene elementos de solo lectura (si no está vacío).
2) RangeAdaptorObject . Sea e una subexpresión, sea T igual a decltype ( ( e ) ) , y sea U igual a std:: remove_cvref_t < T > . Entonces la expresión views :: as_const ( e ) es equivalente-expresión a:

as_const_view siempre modela constant_range , y modela el contiguous_range , random_access_range , bidirectional_range , forward_range , borrowed_range , common_range , y sized_range cuando la vista subyacente V modela los conceptos respectivos.

Contenidos

Miembros de datos

Miembro Descripción
V base_ (privado) la vista subyacente
( objeto miembro solo para exposición* )

Funciones miembro

construye un as_const_view
(función miembro pública)
devuelve la vista subyacente V
(función miembro pública)
devuelve el iterador inicial del as_const_view
(función miembro pública)
devuelve el iterador final del as_const_view
(función miembro pública)
devuelve el tamaño de la vista si está acotada
(función miembro pública)
devuelve el tamaño aproximado del approximately_sized_range subyacente
(función miembro pública)
Heredado de std::ranges::view_interface
devuelve si la vista derivada está vacía, proporcionado solo si satisface sized_range o forward_range
(función miembro pública de std::ranges::view_interface<D> )
(C++23)
devuelve un iterador constante al inicio del rango
(función miembro pública de std::ranges::view_interface<D> )
(C++23)
devuelve un centinela para el iterador constante del rango
(función miembro pública de std::ranges::view_interface<D> )
devuelve si la vista derivada no está vacía, proporcionado solo si ranges::empty es aplicable a ella
(función miembro pública de std::ranges::view_interface<D> )
obtiene la dirección de los datos de la vista derivada, proporcionado solo si su tipo de iterador satisface contiguous_iterator
(función miembro pública de std::ranges::view_interface<D> )
devuelve el primer elemento en la vista derivada, proporcionado si satisface forward_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el último elemento en la vista derivada, proporcionado solo si satisface bidirectional_range y common_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el n ésimo elemento en la vista derivada, proporcionado solo si satisface random_access_range
(función miembro pública de std::ranges::view_interface<D> )

std::ranges::as_const_view:: as_const_view

as_const_view ( ) requires std:: default_initializable < V > = default ;
(1) (desde C++23)
constexpr explicit as_const_view ( V base ) ;
(2) (desde C++23)
1) Inicializa por valor base_  mediante su inicializador de miembro por defecto ( = V ( ) ).
2) Inicializa base_  con std :: move ( base ) .

Parámetros

base - una vista

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)

Devuelve la vista subyacente.

1) Construye por copia el resultado desde la vista subyacente. Equivalente a return base_  ; .
2) Construye por movimiento el resultado desde la vista subyacente. Equivalente a return std :: move ( base_  ) ; .

std::ranges::as_const_view:: begin

constexpr auto begin ( ) requires ( ! /*simple_view*/ < V > ) ;
(1) (desde C++23)
constexpr auto begin ( ) const requires ranges:: range < const V > ;
(2) (desde C++23)

Devuelve el iterador constante de la vista. Equivalente a return ranges:: cbegin ( base_  ) ; .

std::ranges::as_const_view:: end

constexpr auto end ( ) requires ( ! /*simple_view*/ < V > ) ;
(1) (desde C++23)
constexpr auto end ( ) const requires ranges:: range < const V > ;
(2) (desde C++23)

Devuelve el centinela constante de la vista. Equivalente a return ranges:: cend ( base_  ) ; .

std::ranges::as_const_view:: size

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

Devuelve el tamaño de la vista si la vista está acotada. Equivalente a return ranges:: size ( base_  ) ; .

std::ranges::as_rvalue_view:: reserve_hint

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

Devuelve ranges :: reserve_hint ( base_  ) .

Guías de deducción

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

Plantillas auxiliares

template < class T >

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

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

Esta especialización de ranges::enable_borrowed_range hace que as_const_view satisfaga borrowed_range cuando la vista subyacente lo satisface.

Notas

Macro de prueba de características Valor Std Característica
__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 y reserve_hint

Ejemplo

#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, se puede modificar elemento no constante
    auto v2 = x | std::views::drop(2) | std::views::as_const;
    assert(v2.back() == 5);
    // v2[0]++; // Error en tiempo de compilación, no se puede modificar elemento de solo lectura
}

Véase también

una view de una secuencia que convierte cada elemento a un rvalue
(plantilla de clase) (objeto adaptador de rango)
devuelve un iterador al inicio de un rango de solo lectura
(objeto punto de personalización)
devuelve un centinela que indica el final de un rango de solo lectura
(objeto punto de personalización)
(C++17)
obtiene una referencia const a su argumento
(plantilla de función)
adaptador de iterador que convierte un iterador en un iterador constante
(plantilla de clase)