std::weakly_incrementable

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
weakly_incrementable
(C++20)
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
在标头 <iterator> 定义
template< class I >

    concept weakly_incrementable =
        std::movable<I> &&
        requires(I i) {
            typename std::iter_difference_t<I>;
            requires /*is-signed-integer-like*/<std::iter_difference_t<I>>;
            { ++i } -> std::same_as<I&>; // 不要求保持相等性
            i++;                         // 不要求保持相等性

        };
(C++20 起)

/*is-signed-integer-like*/ 的定义见 is-integer-like

此概念指定“能以前后自增运算符自增的类型”上的要求,不过这些自增运算不要求保持相等性,而且不要求类型自身为 std::equality_comparable

对于 std::weakly_incrementable 类型,a == b 不蕴含 ++a == ++b。弱可自增类型上的算法必须是单趟算法。这些算法能通过 std::istream_iterator 用于作为输入数据源的 istream

语义要求

对于 I 类型的对象 i,只有在满足以下所有条件时 I 才会实现 std::weakly_incrementable

  • 表达式 ++ii++ 拥有相同定义域。
  • 如果 i 可自增,那么 ++ii++ 都会增加 i
  • 如果 i 可自增,那么 std::addressof(++i) == std::addressof(i)

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
P2325R3 C++20 要求 default_initializable 不要求

参阅

指定 weakly_incrementable 类型上的自增操作保持相等性,而且该类型为 equality_comparable
(概念)