Namespaces
Variants

std:: weakly_incrementable

From cppreference.net
Iterator library
Iterator concepts
weakly_incrementable
(C++20)
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(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 im 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 & > ; // muss nicht equality-preserving sein
i ++ ; // muss nicht equality-preserving sein

} ;
(seit C++20)

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

Dieses Konzept definiert Anforderungen an Typen, die mit den Prä- und Post-Inkrementoperatoren erhöht werden können, wobei diese Inkrementoperationen nicht notwendigerweise equality-preserving 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 für schwach inkrementierbare Typen müssen Einzel-Durchlauf-Algorithmen sein. Diese Algorithmen können mit Eingabeströmen als Quelle der Eingabedaten über std::istream_iterator verwendet werden.

Semantische Anforderungen

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

  • Die Ausdrücke ++ i und i ++ haben denselben Definitionsbereich.
  • Wenn i inkrementierbar ist, dann erhöhen sowohl ++ i als auch i ++ den Wert von i .
  • Wenn i inkrementierbar ist, dann gilt std:: addressof ( ++ i ) == std:: addressof ( i ) .

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

Siehe auch

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