std::sized_sentinel_for,std::disable_sized_sentinel_for
来自 cppreference.com
在头文件 <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 为应用 ++i 使 bool(i == s) 为 true 所需的最小次数。只有在满足以下所有条件时,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) |
返回等于范围大小的整数 (自定义点对象) |