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) (C++20 起)
constexpr auto data ( ) const

requires ranges:: range < const D > &&

std:: contiguous_iterator < ranges:: iterator_t < const D >> ;
(2) (C++20 起)

data() 成员函数的默认实现通过 std::to_address 获取起始迭代器所表示的地址,当视图非空时,该地址同时也是派生类型视图所引用的连续存储空间(由 contiguous_iterator 隐含保证)的最低地址。

1) derived static_cast < D & > ( * this ) 。等价于 return std:: to_address ( ranges:: begin ( derived ) ) ;
2) (1) 相同,区别在于 derived static_cast < const D & > ( * this )

目录

返回值

起始迭代器所指向的地址。

注释

以下派生类型可以使用 data() 的默认实现:

以下类型派生自 std::ranges::view_interface 且未声明自身的 data() 成员函数,但它们无法使用默认实现,因为其迭代器类型始终不满足 contiguous_iterator

(注:根据要求,所有C++标准库组件名称(如std::ranges::basic_istream_view等)及HTML标签/属性均保持原文未翻译,仅翻译了页面标题文本)

示例

#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)
从指针式类型获取原始指针
(函数模板)