std::experimental::ranges:: RandomAccessIterator
|
template
<
class
I
>
concept
bool
RandomAccessIterator
=
|
(ranges TS) | |
概念
RandomAccessIterator<I>
在
BidirectionalIterator
的基础上进行扩展,增加了通过
+=
、
+
、
-=
和
-
运算符实现常数时间前进/后退的支持,通过
-
运算符实现常数时间距离计算,以及通过下标访问实现数组表示法。
设
a
和
b
是类型为
I
的有效迭代器,且
b
可从
a
抵达,并设
n
为类型
ranges
::
difference_type_t
<
I
>
的值,其等于
b
-
a
。仅当满足以下条件时,
RandomAccessIterator<I>
才被满足:
- ( a + = n ) 等于 b 。
- std:: addressof ( a + = n ) 等于 std:: addressof ( a ) 。
- ( a + n ) 等于 ( a + = n ) 。
- ( a + n ) 等于 ( n + a ) 。
-
对于任意两个正整数
x和y,若 a + ( x + y ) 有效,则 a + ( x + y ) 等于 ( a + x ) + y 。 - a + 0 等于 a 。
- 若 ( a + ( n - 1 ) ) 有效,则 -- b 等于 ( a + ( n - 1 ) ) 。
- ( b + = - n ) 和 ( b - = n ) 均等于 a 。
- std:: addressof ( b - = n ) 等于 std:: addressof ( b ) 。
- ( b - n ) 等于 ( b - = n ) 。
- 若 b 可解引用,则 a [ n ] 有效且等于 * b 。
- bool ( a <= b ) 为 true 。
相等性保持
表达式若在给定相等输入时产生相等输出,则称其具有 等值保持性 。
- 表达式的输入由其操作数构成。
- 表达式的输出由其结果及所有被该表达式修改的操作数(如有)构成。
所有要求保持相等性的表达式必须进一步满足 稳定性 要求:对此类表达式进行两次求值时,若输入对象相同且期间未显式修改这些输入对象,则必须产生相等的输出结果。
除非另有说明,在 要求表达式 中使用的每个表达式都必须保持相等性且稳定,且表达式的求值只能修改其非常量操作数。常量操作数不得被修改。
隐式表达式变体
一个使用对某个常量左值操作数进行非修改性表达式的 requires表达式 ,会隐式要求该表达式接受非常量左值或(可能为常量的)右值作为给定操作数的附加变体,除非已通过具有不同语义的显式要求指定了此类表达式变体。这些 隐式表达式变体 必须满足声明表达式的相同语义要求。实现对这些变体语法验证的程度未作明确规定。