std::sized_sentinel_for, std::disable_sized_sentinel_for
來自 cppreference.com
< 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) |
返回等於範圍大小的整數 (自定義點物件) |