C++ 参考手册

位置:首页 > C++ 参考手册 >迭代器库 > std::weakly_incrementable

定义于头文件 <iterator>
template<class I>

  concept weakly_incrementable =
    std::default_initializable<I> && 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*/<I>std::signed_­integral<I>true 或若 I 为包括所有运算符、隐式转换和 std::numeric_limits 特化的表现类似有符号整数类型的类,则为 true

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

另外,给定类型 I 的任何对象 iI 仅若满足下列条件才实现 std::weakly_incrementable

  • 表达式 ++ii++ 拥有相同定义域
  • i 可自增,则 ++ii++ 均增加 i
  • i 可自增,则 std::addressof(++i) == std::addressof(i)

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

参阅

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