Namensräume
Varianten
Aktionen

no-throw-input-iterator, no-throw-forward-iterator, no-throw-sentinel-for, no-throw-input-range, no-throw-forward-range

Von cppreference.com
< cpp‎ | memory
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
template< class I >

Konzept no-throw-input-iterator =
    std::input_iterator<I> &&
    std::is_lvalue_reference_v<std::iter_reference_t<I>> &&

    std::same_as<std::remove_cvref_t<std::iter_reference_t<I>>, std::iter_value_t<I>>;
(1) (nur Exposition*)
template< class I >

konzept no-throw-forward-iterator =
    no-throw-input-iterator<I> &&
    std::forward_iterator<I> &&

    no-throw-sentinel-for<I, I>;
(2) (nur Exposition*)
template< class S, class I >
konzept no-throw-sentinel-for = std::sentinel_for<S, I>;
(3) (nur Exposition*)
template< class R >

konzept no-throw-input-range =
    ranges::range<R> &&
    no-throw-input-iterator<ranges::iterator_t<R>> &&

    no-throw-sentinel-for<ranges::sentinel_t<R>, ranges::iterator_t<R>>;
(4) (nur Exposition*)
template< class R >

konzept no-throw-forward-range =
    no-throw-input-range<R> &&

    no-throw-forward-iterator<ranges::iterator_t<R>>;
(5) (nur Exposition*)

Diese exposition-only Konzepte spezifizieren, dass keine Ausnahmen von Operationen geworfen werden, die von Algorithmen auf Iteratoren, Sentinels und Ranges benötigt werden.

1) Das Konzept no-throw-input-iterator erfordert, dass das Dereferenzieren des Iterators einen Lvalue liefert, wie bei contiguous_iterator und LegacyForwardIterator.

[bearbeiten] Semantische Anforderungen

Wie alle Standardkonzepte wird jedes hier aufgeführte Konzept nur dann modelliert, wenn alle Konzepte, die es einschließt, modelliert werden.

1) Ein Typ I modelliert no-throw-input-iterator nur, wenn keine Ausnahmen von Inkrement-, Kopierkonstruktion, Move-Konstruktion, Kopierzuweisung, Move-Zuweisung oder Indirektion durch gültige Iteratoren geworfen werden.
3) Typen S und I modellieren no-throw-sentinel-for nur, wenn keine Ausnahmen von Kopierkonstruktion, Move-Konstruktion, Kopierzuweisung, Move-Zuweisung oder Vergleichen zwischen gültigen Werten vom Typ I und S geworfen werden.
4) Ein Typ R modelliert no-throw-input-range nur, wenn keine Ausnahmen von Aufrufen von ranges::begin und ranges::end auf einem Objekt vom Typ R geworfen werden.

[bearbeiten] Hinweise

Diese Konzepte erlauben es einigen Operationen auf Iteratoren und Sentinels, Ausnahmen zu werfen, z.B. Operationen auf ungültigen Werten.

[bearbeiten] Siehe auch

spezifiziert, dass ein Typ ein Eingabeiterator ist, d. h. seine referenzierten Werte können gelesen werden und er kann sowohl prä- als auch post-inkrementiert werden
(Konzept) [bearbeiten]
spezifiziert, dass ein input_iterator ein Vorwärtsiterator ist, der Gleichheitsvergleich und Multi-Pass unterstützt
(Konzept) [bearbeiten]
spezifiziert, dass ein Typ ein Sentinel für einen input_or_output_iterator-Typ ist
(Konzept) [bearbeiten]
spezifiziert einen Range, dessen Iteratortyp input_iterator erfüllt
(Konzept) [edit]
spezifiziert einen Range, dessen Iteratortyp forward_iterator erfüllt
(Konzept) [edit]