Namensräume
Varianten
Aktionen

std::weakly_incrementable

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
weakly_incrementable
(C++20)
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
Definiert in Header <iterator>
template< class I >

    concept weakly_incrementable =
        std::movable<I> &&
        requires(I i) {
            typename std::iter_difference_t<I>;
            requires /*is-signed-integer-like*/<std::iter_difference_t<I>>;
            { ++i } -> std::same_as<I&>; // nicht zwingend gleichheitserhaltend
            i++;                         // nicht zwingend gleichheitserhaltend

        };
(seit C++20)

Für die Definition von /*is-signed-integer-like*/ siehe is-integer-like.

Dieses Konzept spezifiziert Anforderungen an Typen, die mit den Prä- und Post-Inkrementoperatoren inkrementiert werden können, wobei diese Inkrementoperationen nicht notwendigerweise gleichheitserhaltend sind und der Typ selbst nicht std::equality_comparable sein muss.

Für std::weakly_incrementable Typen impliziert a == b nicht, dass ++a == ++b. Algorithmen auf schwach inkrementierbaren Typen müssen Einpassalorithmen sein. Diese Algorithmen können mit Eingabeströmen als Quelle der Eingabedaten über std::istream_iterator verwendet werden.

[bearbeiten] Semantische Anforderungen

Für ein Objekt i vom Typ I modelliert I std::weakly_incrementable nur, wenn alle folgenden Bedingungen erfüllt sind:

  • Die Ausdrücke ++i und i++ haben denselben Definitionsbereich.
  • Wenn i inkrementierbar ist, dann schreiten sowohl ++i als auch i++ i voran.
  • Wenn i inkrementierbar ist, dann gilt std::addressof(++i) == std::addressof(i).

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
P2325R3 C++20 default_initializable war erforderlich. nicht erforderlich.

[bearbeiten] Siehe auch

spezifiziert, dass die Inkrementoperation auf einem weakly_incrementable Typ gleichheitserhaltend ist und dass der Typ equality_comparable ist.
(Konzept) [bearbeiten]