命名空间
变体
操作

std::weakly_incrementable

来自 cppreference.cn
 
 
迭代器库
迭代器概念
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 与输入流一起用作输入数据的源。

[编辑] 语义要求

对于类型 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
(概念) [编辑]