std::experimental::ranges::RandomAccessIterator
出自cppreference.com
| |
(範圍 TS) | |
概念 RandomAccessIterator<I> 細化 BidirectionalIterator,添加用 +=、-=、+ 和 - 運算符的常數時間前進、用 - 的常數時間距離計算,及帶下標的數組記法支持。
令 a 與 b 為 I 類型的合法迭代器,使得從 a 可抵達 b,並令 n 為等於 b - a 的 ranges::difference_type_t<I> 類型值。RandomAccessIterator<I> 僅若符合下列條件才得到滿足:
(a += n)等於b。std::addressof(a += n)等於std::addressof(a)。(a + n)等於(a += n)。(a + n)等於(n + a)。- 對於任何二個正整數
x與y,若a + (x + y)合法,則a + (x + y)等於(a + x) + y。 a + 0等於a。- 若
(a + (n - 1))合法,則--b等於(a + (n - 1))。 (b += -n)與(b -= n)都等於a。std::addressof(b -= n)等於std::addressof(b)。(b - n)等於(b -= n)。- 若
b可解引用,則a[n]合法並等於*b。 bool(a <= b)為true。
相等性保持
若表達式對給定的相等輸入產生相等輸出,則它保持相等性。
- 表達式的輸入由其操作數組成。
- 表達式的輸出由其結果和表達式所修改的所有操作數(若存在)組成。
每個要求保持相等性的表達式還進一步要求是穩定的:以相同輸入對象對這種表達式進行兩次求值必須擁有相等的輸出,而無任何對這些輸入對象的顯式中間修改。
除非另外提醒,每個用於 requires 表達式中的表達式都要求保持相等性且穩定,而表達式的求值必須只修改其非 const 操作數。必須不修改常運算數。
隱式表達式變種
使用不修改某 const 左值操作數的表達式的 requires 表達式亦隱式要求該表達式的額外變種對給定操作數接受非 const 左值或(可為 const 的)右值,除非以有區別的語義顯式要求這種表達式變種。這些隱式表達式變種必須符合與聲明的表達式的相同的語義。不指定實現以何種程度校驗變種的語法。