std::experimental::ranges:: Incrementable
|
Definiert im Header
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
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 Inkrement-Operationen (einschließlich derer, die von
WeaklyIncrementable
gefordert werden) 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 ) .
Gleichheitserhaltung
Ein Ausdruck ist equality preserving , wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben eines Ausdrucks bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen durch den Ausdruck modifizierten Operanden (falls vorhanden).
Jeder Ausdruck, der gleichungserhaltend sein muss, muss darüber hinaus stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, sofern keine explizite Änderung dieser Eingabeobjekte zwischen den Auswertungen erfolgt.
Sofern nicht anders angegeben, muss jeder Ausdruck, der in einem requires-expression verwendet wird, 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.
Hinweise
Die Anforderung, dass
a
gleich
b
ist, impliziert, dass
++a
gleich
++b
ist, erlaubt die Verwendung von Multi-Pass-Algorithmen mit
Incrementable
-Typen.