std::sized_sentinel_for, std::disable_sized_sentinel_for
来自 cppreference.cn
< cpp | 迭代器 (iterator)
定义于头文件 <iterator> |
||
template< class S, class I > concept sized_sentinel_for = |
(1) | (C++20 起) |
template< class S, class I > inline constexpr bool disable_sized_sentinel_for = false; |
(2) | (C++20 起) |
1)
sized_sentinel_for
概念指定了迭代器类型 I
的对象和哨兵类型 S
的对象可以相减,以常数时间计算它们之间的距离。2)
disable_sized_sentinel_for
变量模板可用于防止可以相减但实际上不符合 sized_sentinel_for
模型的迭代器和哨兵满足该概念。 程序可以为 cv 非限定的非数组对象类型
S
和 I
特化 disable_sized_sentinel_for
,只要其中至少有一个是程序定义的类型。此类特化可在常量表达式中使用,并且类型为 const bool。目录 |
[编辑] 语义要求
令 i 为类型 I
的迭代器,s 为类型 S
的哨兵,使得 [
i,
s)
表示一个范围。令 n 为使 bool(i == s) 为 true 所必需的 ++i 的最小应用次数。仅当所有以下条件都满足时,I
和 S
才符合 sized_sentinel_for<S, I>
模型:
- 如果 n 可由 std::iter_difference_t<I> 表示,则 s - i 是良定义的,并等于 n。
- 如果 -n 可由 std::iter_difference_t<I> 表示,则 i - s 是良定义的,并等于 -n。
[编辑] 相等性保持
标准库概念的 requires 表达式中声明的表达式要求是相等性保持的(除非另有说明)。
[编辑] 隐式表达式变体
一个使用了对某些常量左值操作数而言非修改表达式的 requires 表达式,也需要隐式表达式变体。
[编辑] 参阅
(C++20) |
指定范围在常数时间内知道其大小 (概念) |
(C++20) |
返回等于范围大小的整数 (自定义点对象) |