Namespaces
Variants

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

De fr.cppreference.net
 
 
Bibliothèque de plages
Adaptateurs de plage
 
 
constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<D>>;
(1) (depuis C++20)
constexpr auto data() const
    requires ranges::range<const D> && 
        std::contiguous_iterator<ranges::iterator_t<const D>>;
(2) (depuis C++20)

L'implémentation par défaut de la fonction membre data() obtient l'adresse désignée par l'itérateur de début via std::to_address, qui est également l'adresse la plus basse du stockage contigu (impliquée par contiguous_iterator) référencée par la vue du type dérivé lorsque la vue n'est pas vide.

1) Soit derived égal à static_cast<D&>(*this). Équivalent à return std::to_address(ranges::begin(derived));.
2) Identique à (1), sauf que derived est static_cast<const D&>(*this).

Valeur de retour

L'adresse désignée par l'itérateur de début.

Notes

Les types dérivés suivants peuvent utiliser l'implémentation par défaut de data() :

Les types suivants sont dérivés de std::ranges::view_interface et ne déclarent pas leur propre fonction membre data() , mais ils ne peuvent pas utiliser l'implémentation par défaut, car leurs types d'itérateur ne satisfont jamais contiguous_iterator :

Exemple

#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() );
}

Sortie :

C++20!

Voir aussi

(C++17)
obtient le pointeur vers le tableau sous-jacent
(modèle de fonction)
obtient un pointeur vers le début d'une plage contiguë
(objet point de personnalisation)
obtient un pointeur vers le début d'une plage contiguë en lecture seule
(objet point de personnalisation)
(C++20)
obtient un pointeur brut à partir d'un type similaire à un pointeur
(modèle de fonction)