std::experimental::ranges::SizedSentinel
出自cppreference.com
| |
(1) | (範圍 TS) |
| |
(1) | (範圍 TS) |
SizedSentinel 概念指定能對迭代器類型 I 的對象和哨位類型 S 的對象相減,在常數時間內計算其間的距離。
令 i 為 I 類型的迭代器,而 s 為 S 類型的哨位,使得 [i, s) 代表範圍。令 N 為需要應用 ++i 以令 bool(i == s) 為 true 的最小次數。則 SizedSentinel<S, I> 僅若符合下列條件才得到滿足:
- 若
N能以ranges::difference_type_t<I>表示,則s - i良定義並等於N;且 - 若
-N能以ranges::difference_type_t<I>表示,則i - s良定義並等於-N。
變量模板 disable_sized_sentinel 通過特化變量模板為擁有值 true,為能相減但不符合 SizedSentinel 語義要求的迭代器和哨位提供撤出概念的機制。
相等性保持
若表達式對給定的相等輸入產生相等輸出,則它保持相等性。
- 表達式的輸入由其操作數組成。
- 表達式的輸出由其結果和表達式所修改的所有操作數(若存在)組成。
每個要求保持相等性的表達式還進一步要求是穩定的:以相同輸入對象對這種表達式進行兩次求值必須擁有相等的輸出,而無任何對這些輸入對象的顯式中間修改。
除非另外提醒,每個用於 requires 表達式中的表達式都要求保持相等性且穩定,而表達式的求值必須只修改其非 const 操作數。必須不修改常運算數。
隱式表達式變種
使用不修改某 const 左值操作數的表達式的 requires 表達式亦隱式要求該表達式的額外變種對給定操作數接受非 const 左值或(可為 const 的)右值,除非以有區別的語義顯式要求這種表達式變種。這些隱式表達式變種必須符合與聲明的表達式的相同的語義。不指定實現以何種程度校驗變種的語法。