std::experimental::ranges::WeaklyIncrementable
| Definiert in Header <experimental/ranges/iterator> |
||
| template< class I > concept bool WeaklyIncrementable = |
(Ranges TS) | |
Das Konzept WeaklyIncrementable<I> spezifiziert die Anforderungen an einen Typ, der inkrementiert werden kann (mit den Prä- und Post-Inkrement-Operatoren). Die Inkrement-Operationen müssen nicht gleichheitserhaltend sein, und der Typ muss nicht EqualityComparable sein.
Sei i ein Objekt vom Typ I. i wird als *inkrementierbar* bezeichnet, wenn es im Definitionsbereich sowohl des Prä- als auch des Post-Inkrements liegt. WeaklyIncrementable<I> ist nur dann erfüllt, wenn
- ++i und i++ denselben Definitionsbereich haben;
- Wenn i inkrementierbar ist, dann
- ++i und i++ befördern beide i zum nächsten Element; und
- ++i bezieht sich auf dasselbe Objekt wie i.
[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.
[bearbeiten] Hinweise
Bei WeaklyIncrementable-Typen impliziert a gleich b nicht, dass ++a gleich ++b ist. Algorithmen auf solchen Typen sollten Einzelpass-Algorithmen sein und niemals versuchen, denselben Wert zweimal zu durchlaufen.