std::ranges::view_interface<D>::data
constexpr auto data()
requires std::contiguous_iterator<ranges::iterator_t<D>>;
| (1) | (since C++20) |
constexpr auto data() const
requires ranges::range<const D> &&
std::contiguous_iterator<ranges::iterator_t<const D>>;
| (2) | (since C++20) |
Реализация по умолчанию функции-члена data() получает адрес, обозначаемый начальным итератором, с помощью std::to_address, что также является самым низким адресом непрерывного хранилища (предполагается contiguous_iterator), к которому обращается представление производного типа, когда представление не пустое.
derived будет static_cast<D&>(*this). Эквивалентно return std::to_address(ranges::begin(derived));.derived равно static_cast<const D&>(*this).Параметры
(нет)
Возвращаемое значение
Адрес, обозначаемый начальным итератором.
Примечания
Следующие производные типы могут использовать реализацию по умолчанию для data():
-
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
Следующие типы происходят от std::ranges::view_interface и не объявляют свою собственную функцию-член data() , но они не могут использовать реализацию по умолчанию, потому что их типы итераторов никогда не удовлетворяют contiguous_iterator:
-
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
Пример
#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() );
}Вывод:
C++20!
См. также
|
(C++17) | получает указатель на базовый массив (шаблон функции) |
|
(C++20) | получает указатель на начало непрерывного диапазона (объект точки кастомизации) |
|
(C++20) | получает указатель на начало только для чтения непрерывного диапазона (объект точки кастомизации) |
|
(C++20) | получает сырой указатель от указательподобного типа (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/view_interface/data