Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
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 por defecto de la función miembro data() obtiene la dirección denotada por el iterador inicial 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 ) .

Contenidos

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)