std::span<T,Extent>::span

来自cppreference.com
< cpp‎ | container‎ | span
constexpr span() noexcept;
(1)
constexpr span(pointer ptr, index_type count);
(2)
constexpr span(pointer first, pointer last);
(3)
template <std::size_t N>
constexpr span(element_type (&arr)[N]) noexcept;
(4)
template <std::size_t N>
constexpr span(std::array<value_type, N>& arr) noexcept;
(5)
template <std::size_t N>
constexpr span(const std::array<value_type, N>& arr) noexcept;
(6)
template <class Container>
constexpr span(Container& cont);
(7)
template <class Container>
constexpr span(const Container& cont);
(8)
template <class U, std::size_t N>
constexpr span(const std::span<U, N>& s) noexcept;
(9)
constexpr span(const span& other) noexcept = default;
(10)

构造 span

1) 构造空 span ,其 data() == nullptrsize() == 0 。此重载仅若extent == 0 || extent == std::dynamic_extent 才参与重载决议。
2) 构造作为范围 [ptr, ptr + count) 上视图的 span ;产生的 span 有 data() == ptrsize() == count 。若 [ptr, ptr + count) 不是合法范围或若 extent != std::dynamic_extent && count != extent 则行为未定义。
3) 构造作为范围 [first, last) 上视图的 span ;等价于 span(first, last - first)
4-6) 构造作为数组 arr 上的视图的 span ;产生的 span 有 size() == Ndata() == std::data(arr) 。这些重载仅若 extent == std::dynamic_extent || N == extenttruestd::remove_pointer_t<decltype(std::data(arr))>(*)[] 可转换为 element_type (*)[] 才参与重载决议。
7-8) 构造作为范围 [std::data(cont), std::data(cont) + std::size(cont)) 上视图的 span ;产生的 span 有 size() == std::size(cont)data() == std::data(cont) 。若它不是合法范围或若 extent != std::dynamic_extent && std::size(cont) != extent 则行为未定义。

这些重载仅若

才参与重载决议
9) 源自另一 span s 的转换构造函数;产生的 span 有 size() == s.size()data() == s.data() 。此重载仅若 extent == std::dynamic_extent || N == extenttrueU (*)[] 可转换为 element_type (*)[] 才参与重载决议。
10) 默认化的复制构造函数复制大小和数据指针;产生的 span 有 size() == other.size()data() == other.data()

[编辑] 参数

ptr, first - 指向序列首元素的指针
count - 序列中的元素数
last - 指向序列尾后一位置的指针
arr - 要为之构造视图的数组
cont - 要为之构造视图的容器
s - 要自之转换的另一 span
other - 要复制的另一 span

[编辑] 异常

2-3) 不抛出。
7-8)std::size(cont)std::data(cont) 抛出时抛出其所抛的异常。

[编辑] 参阅

返回指向元素序列起始的指针
(公开成员函数) [编辑]
返回序列中的元素数
(公开成员函数) [编辑]
赋值 span
(公开成员函数) [编辑]
(C++17)(C++20)
返回容器或数组的大小
(函数模板) [编辑]
(C++17)
获得指向底层数组的指针
(函数模板) [编辑]