std::experimental::ranges::SizedSentinel
定義於標頭檔案 <experimental/ranges/iterator> |
||
template< class S, class I > concept bool SizedSentinel = |
(1) | (ranges TS) |
template< class S, class I > constexpr bool disable_sized_sentinel = false; |
(1) | (ranges TS) |
SizedSentinel
概念規定,型別為 I
的迭代器物件和型別為 S
的哨兵物件可以相減,以常數時間計算它們之間的距離。
令 i
為型別為 I
的迭代器,s
為型別為 S
的哨兵,使得 [
i,
s)
表示一個範圍。令 N
為使 bool(i == s) 為 true 所需的 ++i
的最小應用次數。則 SizedSentinel<S, I>
僅在以下情況滿足:
- 如果
N
可以由 ranges::difference_type_t<I> 表示,則 s - i 是定義良好的並等於N
;並且 - 如果
-N
可以由 ranges::difference_type_t<I> 表示,則 i - s 是定義良好的並等於-N
。
變數模板 disable_sized_sentinel
提供了一種機制,允許可以相減但不滿足 SizedSentinel
語義要求的迭代器和哨兵透過將變數模板特化為 true 值來選擇退出此概念。
[編輯] 相等性保留
如果一個表示式在給定相等輸入時產生相等輸出,則稱其為保持相等性。
- 表示式的輸入由其運算元組成。
- 表示式的輸出由其結果以及被表示式修改的所有運算元(如果有的話)組成。
所有要求保持相等性的表示式還必須是穩定的:在沒有顯式介入修改輸入物件的情況下,對具有相同輸入物件的表示式的兩次求值必須產生相等的輸出。
除非另有說明,requires-expression 中使用的每個表示式都必須保持相等且穩定,並且表示式的評估只能修改其非常量運算元。常量運算元不得修改。
[編輯] 隱式表示式變體
如果一個 `requires-expression` 對某個常量左值運算元使用非修改表示式,它也會隱式地要求該表示式的其他變體,這些變體接受非常量左值或(可能是常量的)右值作為給定運算元,除非明確要求具有不同語義的此類表示式變體。這些 *隱式表示式變體* 必須滿足與宣告表示式相同的語義要求。實現驗證這些變體語法的程度是未指定的。