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) |
返回等於範圍大小的整數 (自定義點物件) |