std::experimental::ranges::Incrementable
| Definiert in Header <experimental/ranges/iterator> |
||
| template< class I > Konzept bool Incrementable = |
(Ranges TS) | |
Das Konzept Incrementable<I> spezifiziert die Anforderungen an einen Typ, der inkrementiert werden kann (mit den Prä- und Post-Inkrement-Operatoren). Die Inkrementoperationen (einschließlich der von WeaklyIncrementable geforderten) müssen gleichheitserhaltend sein und der Typ muss EqualityComparable sein.
Seien a und b inkrementierbare Objekte vom Typ I. Incrementable<I> ist nur dann erfüllt, wenn
- Wenn bool(a == b) dann bool(a++ == b).
- Wenn bool(a == b) dann bool(void(a++), a) == ++b).
[bearbeiten] Gleichheitserhaltung
Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).
Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.
Sofern nicht anders angegeben, muss jeder in einem requires-expression verwendete Ausdruck gleichheitserhaltend und stabil sein, und die Auswertung des Ausdrucks darf nur seine nicht-konstanten Operanden modifizieren. Operanden, die konstant sind, dürfen nicht modifiziert werden.
[bearbeiten] Hinweise
Die Anforderung, dass a gleich b ist, impliziert, dass ++a gleich ++b ist, was die Verwendung von Multi-Pass-Algorithmen mit Incrementable-Typen ermöglicht.