std::experimental::ranges:: SizedSentinel
|
template
<
class
S,
class
I
>
concept
bool
SizedSentinel
=
|
(1) | (ranges TS) |
|
template
<
class
S,
class
I
>
constexpr bool disable_sized_sentinel = false ; |
(1) | (ranges TS) |
SizedSentinel
概念规定了迭代器类型
I
的对象与哨兵类型
S
的对象可以通过相减运算在常数时间内计算出两者间的距离。
设
i
为类型
I
的迭代器,
s
为类型
S
的哨位,使得
[
i
,
s
)
表示一个范围。设
N
为使
bool
(
i
==
s
)
成立所需应用
++i
的最小次数。则仅当满足以下条件时
SizedSentinel<S, I>
成立:
-
若
N可由 ranges :: difference_type_t < I > 表示,则 s - i 是良定义的且等于N;且 -
若
-N可由 ranges :: difference_type_t < I > 表示,则 i - s 是良定义的且等于-N。
变量模板
disable_sized_sentinel
为可进行减法运算但不符合
SizedSentinel
语义要求的迭代器和哨位提供了一种机制,通过特化该变量模板使其值为
true
来退出该概念。
等值保持性
表达式若在给定相等输入时产生相等输出,则称其具有 等值保持性 。
- 表达式的输入由其操作数构成。
- 表达式的输出由其结果及所有被该表达式修改的操作数(如有)构成。
每个要求保持相等性的表达式还必须满足 稳定性 要求:对此类表达式进行两次求值时,若输入对象相同且未进行任何显式修改,则必须产生相等的输出结果。
除非另有说明,每个在 要求表达式 中使用的表达式都必须保持相等性且稳定,且该表达式的求值只能修改其非常量操作数。常量操作数不得被修改。
隐式表达式变体
一个使用对某个常量左值操作数进行非修改性表达式的 requires-expression ,也会隐式要求接受该操作数的非常量左值或(可能为常量的)右值的该表达式的额外变体,除非这样的表达式变体已通过具有不同语义的方式被显式要求。这些 隐式表达式变体 必须满足所声明表达式的相同语义要求。实现对这些变体语法验证的程度是未指定的。