命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | 范围‎ | 视图接口
 
 
范围库
范围适配器
 
 
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 暗示)。

1)derivedstatic_cast<D&>(*this)。等效于 return std::to_address(ranges::begin(derived));
2)(1) 相同,除了 derivedstatic_cast<const D&>(*this)

目录

[编辑] 参数

(无)

[编辑] 返回值

由起始迭代器表示的地址。

[编辑] 说明

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

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

[编辑] 示例

#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)
获取指向底层数组的指针
(函数模板) [编辑]
获取指向连续范围开头的指针
(自定义点对象)[编辑]
获取指向只读连续范围开头的指针
(自定义点对象)[编辑]
从类似指针的类型获取原始指针
(函数模板) [编辑]