std::sentinel_for
来自cppreference.com
定义于头文件 <iterator>
|
||
template<class S, class I> concept sentinel_for = |
(C++20 起) | |
sentinel_for
概念描述的 input_or_output_iterator
与 semiregular
类型间的关系,二者的值代表范围。仅用于阐释的概念 __WeaklyEqualityComparableWith
描述于 equality_comparable
。
语义要求
令 s
与 i
分别表示 S
与 I
类型的值,使得 [i, s)
代表范围。 sentinel_for<S, I>
仅若下列条件成立才得到实现:
- i == s 为良定义。
- 若 bool(i != s) 则
i
可解引用且[++i, s)
代表范围。 - std::assignable_from<I&, S> 要么得到实现,要么不被满足。
==
能随时间而更改。给定迭代器 i
和哨位 s
并使得 [i, s)
代表范围且 i != s ,不要求自增任何等于 i
的迭代器后 [i, s)
继续代表范围(从而这种自增后不再要求 i == s 是良定义的)。
注解
不要求哨位类型与其对应的迭代器类型实现 equality_comparable_with
,因为哨位类型可以不可与自身比较,而且不要求它们拥有共用引用类型。
C++17 起已容许在基于范围的 for
循环中使用异于迭代器类型的哨位类型。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3453 | C++20 | sentinel_for 的语义要求对 ranges::advance 过于宽松
|
已强化 |