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_ ,但该值不一定能隐式转换到对应的无符号整数式类型 |
改成显式转换 |
示例
本节未完成 原因:暂无示例 |