std::weakly_incrementable

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
weakly_incrementable
(C++20)
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
流迭代器
迭代器定制点
迭代器操作
(C++11)
(C++11)
范围访问
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
在标头 <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> 当且仅当 I 为有符号整数式类型(见后述)。

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

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

语义要求

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

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

整数式类型

一个整数式类型是(可有 cv 限定的)整数类型(除了 cv bool )或一个实现提供(非用户提供)的表现同整数类型的类,包括所有运算符、隐式转换及 std::numeric_limits 特化。若一个整数式类型仅表示非负值,则它为无符号整数式,否则它为有符号整数式。

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 3467 C++20 bool 被认为是整数类型 已排除
P2325R3 C++20 要求 default_initializable 不要求

参阅

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