std::weakly_incrementable
来自cppreference.com
<tbody>
</tbody>
| 在标头 <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:
- 表达式
++i与i++拥有相同定义域。 - 如果
i可自增,那么++i与i++都会增加i。 - 如果
i可自增,那么std::addressof(++i) == std::addressof(i)。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| P2325R3 | C++20 | 要求 default_initializable
|
不要求 |
参阅
(C++20) |
指定 weakly_incrementable 类型上的自增操作保持相等性,而且该类型为 equality_comparable (概念) |