Namespaces
Variants

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

Von de.cppreference.net
 
 
Ranges-Bibliothek
Range-Adaptoren
 
 
constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<D>>;
(1) (seit C++20)
constexpr auto data() const
    requires ranges::range<const D> && 
        std::contiguous_iterator<ranges::iterator_t<const D>>;
(2) (seit C++20)

Die Standardimplementierung der data()-Elementfunktion erhält die Adresse, die durch den Anfangsiterator bezeichnet wird, über std::to_address, welches auch die niedrigste Adresse des zusammenhängenden Speichers ist (impliziert durch contiguous_iterator), auf den der View des abgeleiteten Typs verweist, wenn der View nicht leer ist.

1) Sei derived gleich static_cast<D&>(*this). Äquivalent zu return std::to_address(ranges::begin(derived));.
2) Gleich wie (1), außer dass derivedstatic_cast<const D&>(*this) ist.

Rückgabewert

Die Adresse, die durch den Beginn-Iterator bezeichnet wird.

Hinweise

Die folgenden abgeleiteten Typen können die Standardimplementierung von data() verwenden:

Folgende Typen sind von std::ranges::view_interface abgeleitet und deklarieren keine eigene data() Memberfunktion, können jedoch die Standardimplementierung nicht verwenden, da ihre Iteratortypen niemals contiguous_iterator erfüllen:

Beispiel

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

Ausgabe:

C++20!

Siehe auch

(C++17)
Ermittelt den Zeiger auf das zugrundeliegende Array
(Funktionstemplate)
Ermittelt einen Zeiger auf den Anfang eines zusammenhängenden Bereichs
(Anpassungspunktobjekt)
Ermittelt einen Zeiger auf den Anfang eines schreibgeschützten zusammenhängenden Bereichs
(Anpassungspunktobjekt)
(C++20)
Ermittelt einen Rohzeiger aus einem zeigerähnlichen Typ
(Funktionstemplate)