std::ranges::subrange<I,S,K>::subrange
来自 zh.cppreference.net
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 )
requires (K == ranges::subrange_kind::sized);
|
(3) | (C++20 起) |
template< /*different-from*/<subrange> R >
requires ranges::borrowed_range<R> &&
/*convertible-to-non-slicing*/<ranges::iterator_t<R>, I> &&
std::convertible_to<ranges::sentinel_t<R>, S>
constexpr subrange( R&& r )
requires (!/*StoreSize*/ || ranges::sized_range<R>);
|
(4) | (C++20 起) |
template< ranges::borrowed_range R>
requires /*convertible-to-non-slicing*/<ranges::iterator_t<R>, I> &&
std::convertible_to<ranges::sentinel_t<R>, S>
constexpr subrange( R&& r,
/*make-unsigned-like-t*/<std::iter_difference_t<I>> n )
requires (K == ranges::subrange_kind::sized)
: subrange{ranges::begin(r), ranges::end(r), n} {}
|
(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
| ||
| 以 | 初始化std::move(ranges::begin(r))
|
(4)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++ 标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| P2393R1 | C++20 |
对于重载版本
(
4
)
,
size_
可能使用
ranges::
size
(
r
)
初始化,但该值
并不总能隐式转换为对应的 unsigned-integer-like 类型 |
将转换
改为显式进行 |