std::ranges::view_interface<D>::data
Von cppreference.com
< cpp | ranges | view interface
| constexpr auto data() requires std::contiguous_iterator<ranges::iterator_t<D>>; |
(1) | (seit C++20) |
| constexpr auto data() const requires ranges::range<const D> && |
(2) | (seit C++20) |
Die Standardimplementierung der Member-Funktion data() ermittelt die vom Anfangs-Iterator bezeichnete Adresse über std::to_address, was auch die niedrigste Adresse des zusammenhängenden Speichers ist (impliziert durch contiguous_iterator), auf den sich die View des abgeleiteten Typs bezieht, wenn die View nicht leer ist.
2) Gleich wie (1), außer dass
derived gleich static_cast<const D&>(*this) ist.Inhalt |
[edit] Parameter
(keine)
[edit] Rückgabewert
Die vom Anfangs-Iterator bezeichnete Adresse.
[edit] Hinweise
Folgende abgeleitete Typen können die Standardimplementierung von data() verwenden
- std::ranges::common_view
- std::ranges::drop_view
- std::ranges::drop_while_view
- std::ranges::ref_view
- std::ranges::subrange
- std::ranges::take_view
- std::ranges::take_while_view
Folgende Typen leiten sich von std::ranges::view_interface ab und deklarieren keine eigene data()-Memberfunktion, können aber die Standardimplementierung nicht verwenden, da ihre Iterator-Typen niemals contiguous_iterator erfüllen.
- std::ranges::basic_istream_view
- std::ranges::elements_view
- std::ranges::filter_view
- std::ranges::iota_view
- std::ranges::join_view
- std::ranges::lazy_split_view
- std::ranges::reverse_view
- std::ranges::split_view
- std::ranges::transform_view
[edit] Beispiel
Führen Sie diesen Code aus
#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!
[edit] Siehe auch
| (C++17) |
erhält den Zeiger auf das zugrundeliegende Array (function template) |
| (C++20) |
ruft einen Zeiger auf den Anfang eines zusammenhängenden Ranges ab (Customization Point Objekt) |
| (C++20) |
ruft einen Zeiger auf den Anfang eines schreibgeschützten zusammenhängenden Ranges ab (Customization Point Objekt) |
| (C++20) |
ermöglicht den Zugriff auf einen Rohzeiger von einem zeigerähnlichen Typ (Funktions-Template) |