std::ranges::subrange<I,S,K>::subrange
来自cppreference.com
| subrange() requires std::default_initializable<I> = default; |
(1) | (C++20 起) |
| constexpr subrange( /*convertible-to-non-slicing*/<I> auto i, S s ) requires (!/*StoreSize*/); |
(2) | (C++20 起) |
| constexpr subrange( /*convertible-to-non-slicing*/<I> auto i, S s, /*make-unsigned-like-t*/<std::iter_difference_t<I>> n ) |
(3) | (C++20 起) |
| template< /*different-from*/<subrange> R > requires ranges::borrowed_range<R> && |
(4) | (C++20 起) |
| template< ranges::borrowed_range R> requires /*convertible-to-non-slicing*/<ranges::iterator_t<R>, I> && |
(5) | (C++20 起) |
构造 subrange。
/*make-unsigned-like-t*/ 和 /*different-from*/ 的定义分别见 make-unsigned-like-t 和 different-from 。
| 重载 | 数据成员 | ||
|---|---|---|---|
begin_
|
end_
|
size_(仅当 StoreSize 是 true)
| |
| (1) | 值初始化 | 值初始化 | 以 0 初始化 |
| (2) | 以 std::move(i) 初始化 | 以 s 初始化 | 不适用 |
| (3) | 以 n 初始化 | ||
| (4) | 以 std::move(ranges::begin(r)) 初始化 | 以 ranges::end(r) 初始化 | 以 static_cast<decltype(size_ )> (ranges::size(r)) 初始化
|
| (5) | 以 n 初始化 | ||
3) 如果满足以下任意条件,那么行为未定义:
-
[i,s)不是有效范围。 - n ==
to-unsigned-like(ranges::distance(i, s)) 是 false。
参数
| i | - | 代表范围起始的迭代器 |
| s | - | 代表范围末尾的哨位 |
| r | - | 范围 |
| n | - | 大小提示,必须等于范围大小 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| P2393R1 | C++20 | 重载 (4) 可能会以 ranges::size(r) 初始化 size_,但该值不一定能隐式转换到对应的无符号整数式类型 |
改成显式转换 |
示例
| 本节未完成 原因:暂无示例 |