Namespaces
Variants

std::experimental::ranges:: WeaklyIncrementable

From cppreference.net
template < class I >

concept bool WeaklyIncrementable =
Semiregular < I > &&
requires ( I i ) {
typename ranges :: difference_type_t < I > ;
requires SignedIntegral < ranges :: difference_type_t < I >> ;
{ ++ i } - > Same < I > & ; /* 不要求保持相等性 */
i ++ ; /* 不要求保持相等性 */

} ;
(ranges TS)

概念 WeaklyIncrementable<I> 规定了可通过前置与后置递增运算符进行自增操作的类型所需满足的要求。递增操作不必保持相等性,且该类型不必满足 EqualityComparable

i 为类型 I 的对象。若 i 同时处于前置递增与后置递增的定义域内,则称其为 可递增 。仅当满足以下条件时 WeaklyIncrementable<I> 成立:

  • ++ i i ++ 具有相同的定义域;
  • i 可递增,则:
    • ++ i i ++ 均将 i 推进至下一元素;且
    • ++ i 指向与 i 相同的对象。

等值保持性

表达式若在给定相等输入时产生相等输出,则称其具有 等值保持性

  • 表达式的输入由其操作数构成。
  • 表达式的输出由其结果及所有被该表达式修改的操作数(如有)构成。

每个要求保持相等性的表达式还必须满足 稳定性 要求:对此类表达式进行两次求值时,若输入对象相同且未进行任何显式修改,则必须产生相等的输出结果。

注释

对于 WeaklyIncrementable 类型, a 等于 b 并不意味着 ++ a 等于 ++ b 。针对此类类型的算法应为单次遍历,且不应尝试两次通过同一值。