C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- std::array
- std::vector
- std::map
- std::unordered_map
- std::priority_queue
- std::span
- std::span<T,Extent>::span
- std::span<T,Extent>::operator=
- std::span<T,Extent>::front
- std::span<T,Extent>::back
- std::span<T,Extent>::operator[]
- std::span<T,Extent>::data
- std::span<T,Extent>::begin
- std::span<T,Extent>::end
- std::span<T,Extent>::rbegin
- std::span<T,Extent>::rend
- std::span<T,Extent>::empty
- std::span<T,Extent>::size
- std::span<T,Extent>::size_bytes
- std::span<T,Extent>::first
- std::span<T,Extent>::last
- std::span<T,Extent>::subspan
- std::as_bytes, std::as_writable_bytes
- std::get(std::span)
- std::dynamic_extent
- std::span 的推导指引
- std::forward_list
- std::deque
- std::list
- std::set
- std::multiset
- std::multimap
- std::unordered_set
- std::unordered_multiset
- std::unordered_multimap
- std::stack
- std::queue
- std::vector<bool>
- 结点把柄 (C++17)
- 注释
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::span<T,Extent>::span
constexpr span() noexcept; |
(1) | |
template <class It> constexpr span(It first, size_type count); |
(2) | |
template <class It, class End> constexpr span(It first, End last); |
(3) | |
template <std::size_t N> constexpr span(element_type (&arr)[N]) noexcept; |
(4) | |
template <class U, std::size_t N> constexpr span(std::array<U, N>& arr) noexcept; |
(5) | |
template <class U, std::size_t N> constexpr span(const std::array<U, N>& arr) noexcept; |
(6) | |
template <class R> constexpr span(R&& r); |
(7) | |
template <class U, std::size_t N> constexpr span(const std::span<U, N>& s) noexcept; |
(8) | |
constexpr span(const span& other) noexcept = default; |
(9) | |
构造 span
。
1) 构造空 span 使其 data() == nullptr 而 size() == 0 。此重载仅若extent == 0 || extent == std::dynamic_extent才参与重载决议。
2) 构造作为范围
[first, first + count)
上的视图的 span ;产生的 span 有 data() == std::to_address(first) 与 size() == count 。若 [first, first + count)
不是合法范围,若 It
不实际实现 contiguous_iterator 或若 extent != std::dynamic_extent && count != extent 则行为未定义。这些重载仅若
It
满足 contiguous_iterator- 从 std::iter_reference_t<It> 到 element_type 的转换至多为限定转换才参与重载决议。
3) 构造作为范围
[first, last)
上的视图的 span ;产生的 span 有 data() == std::to_address(first) 与 size() == last-first 。若 [first, last)
不是合法范围,若 It
不实际实现 contiguous_iterator ,若 End
不实际实现 It
的 sized_sentinel_for ,或若 extent != std::dynamic_extent && last-first != extent 则行为未定义。这些重载仅若
-
It
满足 contiguous_iterator , -
End
满足It
的 sized_sentinel_for , - 从 std::iter_reference_t<It> 到 element_type 的转换至多为限定转换,且
-
End
不可转换成 std::size_t才参与重载决议。
-
4-6) 构造作为数组
arr
上的视图的 span ;产生的 span 有 size() == N 与 data() == std::data(arr) 。这些重载仅若extent == std::dynamic_extent || N == extent 为 true 且 std::remove_pointer_t<decltype(std::data(arr))>(*)[] 可转换到 element_type (*)[] 才参与重载决议。这些构造函数模板决不用于类模板实参推导。7) 构造作为范围 r 上的视图的 span ;产生的 span 有 size() == std::ranges::size(r) 与 data() == std::ranges::data(r) 。
若 R
不实际实现 contiguous_range 与 sized_range 或当 element_type 为非 const 时 R
不实际实现 borrowed_range 则行为未定义。
这些重载仅若
- extent == dynamic_extent ;
-
R
满足 contiguous_range 与 sized_range , -
R
满足 borrowed_range 或 std::is_const_v<element_type> 为 true - std::remove_cvref_t<R> 不是
std::span
的特化, - std::remove_cvref_t<R> 不是 std::array 的特化,
- std::is_array_v<std::remove_cvref_t<R>> 为 false ,且
- 从 std::ranges::range_reference_t<R> 到 element_type 的转换至多为限定转换
8) 从另一 span
s
的转换构造函数;产生的 span 有 size() == s.size() 与 data() == s.data() 。此重载仅若extent == std::dynamic_extent || N == extent 为 true 且 U (*)[] 可转换为 element_type (*)[] 才参与重载决议。9) 默认化的赋值构造函数复制大小与数据指针;产生的 span 有 size() == other.size() 与 data() == other.data() 。
参数
first | - | 指向序列首元素的迭代器 |
count | - | 序列的元素数 |
last | - | 指向序列末元素后一位置的迭代器或另一哨位 |
arr | - | 用于构造视图的数组 |
r | - | 用于构造视图的范围 |
s | - | 要转换的另一 span |
other | - | 要复制的另一 span |
异常
2) 不抛出。
3) 在抛出时 last - first 抛出其所抛出的异常。
7) 在 std::ranges::size(r) 与 std::ranges::data(r) 抛出时抛出其所抛出的异常。
参阅
返回指向元素序列起始的指针 (公开成员函数) | |
返回序列中的元素数 (公开成员函数) | |
赋值 span (公开成员函数) | |
(C++17)(C++20) |
返回容器或数组的大小 (函数模板) |
(C++17) |
获得指向底层数组的指针 (函数模板) |