std::ranges::subrange<I,S,K>::subrange
| 成员函数 | ||||
|
subrange::subrange
(C++20)
|
||||
|
(C++20)
|
||||
| 观察器 | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| 迭代器操作 | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| 推导指引 | ||||
| 非成员函数 | ||||
|
(C++20)
|
||||
| 辅助类型 | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
|
subrange()
requires std::default_initializable<I>
= default;
|
(1) | (C++20 起) |
|
constexpr
subrange(
/*convertible-to-non-slicing*/<I>
auto i,
S s )
requires (!/*store-size*/); |
(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 。
若 K == ranges::subrange_kind::sized && !std::sized_sentinel_for<S, I> ,则存储范围大小到
subrange 中,如同用 /*make-unsigned-like-t*/<std::iter_difference_t<I>>
类型的成员子对象存储,其中 make-unsigned-like-t 是仅用于阐释的别名模板,将每个整数式类型映射到其对应的无符号版本。否则不存储大小。若存储大小则常量
store-size 为 true ,否则为 false 。
subrange
。分别以 std::move(i) 与
s 初始化存储的迭代器与哨位。若 [i, s) 不是合法范围则行为未定义。subrange 。分别以 std::move(i) 与
s 初始化存储的迭代器与哨位。若存储大小,则以 n 初始化它。若
[i, s) 不是合法范围,或 n 不等于显式转换到其类型的 ranges::distance(i, s) 则行为未定义。subrange
。若存储大小则等价于 subrange(r, static_cast</*make-unsigned-like-t*/<std::iter_difference_t<I>>>(ranges::size(r))) 。否则等价于 subrange(ranges::begin(r),
ranges::end(r)) 。仅用于阐释的概念 different-from 为类型 T 与
U 实现,当且仅当 std::decay_t<T> 与 std::decay_t<U> 是不同的类型。
仅用于阐释的概念 convertible-to-non-slicing 为 From 与
To 满足或实现,当且仅当 std::convertible_to<From, To>
得到满足或实现,且任一下列条件得到满足:
- std::decay_t<From> 或 std::decay_t<To> 不是指针类型、
- std::remove_pointer_t<From>(*)[]
可隐式转换为 std::remove_pointer_t<To>(*)[] ,即从
From到To的转换至多为限定转换。
参数
| i | - | 代表范围起始的迭代器 |
| s | - | 代表范围末尾的哨位 |
| r | - | 范围 |
| n | - | 大小提示,必须等于范围大小 |
注解
仅用于阐释的概念 convertible-to-non-slicing
禁止从指向派生类的指针到指向基类的指针的转换。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3470 | C++20 | convertible-to-non-slicing 曾拒绝一些合法的限定转换
|
使之接受 |
| P2393R1 | C++20 | 到整数类类型的隐式转换可能非法 | 使之为显式 |
示例
| 本节未完成 原因:暂无示例 |