Namespaces
Variants

std::ranges::view_interface<D>::data

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<D>>;
(1) (desde C++20)
constexpr auto data() const
    requires ranges::range<const D> && 
        std::contiguous_iterator<ranges::iterator_t<const D>>;
(2) (desde C++20)

La implementación predeterminada de la función miembro data() obtiene la dirección indicada por el iterador de inicio mediante std::to_address, que también es la dirección más baja del almacenamiento contiguo (implícito por contiguous_iterator) referenciado por la vista del tipo derivado cuando la vista no está vacía.

1) Sea derived igual a static_cast<D&>(*this). Equivalente a return std::to_address(ranges::begin(derived));.
2) Igual que (1), excepto que derived es static_cast<const D&>(*this).

Valor de retorno

La dirección denotada por el iterador inicial.

Notas

Los siguientes tipos derivados pueden usar la implementación predeterminada de data() :

Los siguientes tipos derivan de std::ranges::view_interface y no declaran su propia función miembro data() , pero no pueden usar la implementación por defecto porque sus tipos de iterador nunca satisfacen contiguous_iterator :

Ejemplo

#include <array>
#include <iostream>
#include <ranges>
#include <string_view>
int main() {
    constexpr std::string_view str { "Hello, C++20!" };
    std::cout << (str | std::views::drop(7)).data() << '\n';
    constexpr static std::array a { 1,2,3,4,5 };
    constexpr auto v { a | std::views::take(3) };
    static_assert( &a[0] == v.data() );
}

Salida:

C++20!

Véase también

(C++17)
obtiene el puntero al array subyacente
(plantilla de función)
obtiene un puntero al inicio de un rango contiguo
(objeto punto de personalización)
obtiene un puntero al inicio de un rango contiguo de solo lectura
(objeto punto de personalización)
(C++20)
obtiene un puntero crudo de un tipo similar a puntero
(plantilla de función)