std::common_iterator<I,S>::operator++
Von cppreference.com
< cpp | iterator | common iterator
| constexpr common_iterator& operator++(); |
(1) | (seit C++20) |
| constexpr decltype(auto) operator++( int ); |
(2) | (seit C++20) |
| Hilfstypen |
||
| class /*postfix_proxy*/ { std::iter_value_t<I> keep_; |
(3) | (nur Exposition*) |
Inkrementiert den zugrundeliegenden Iterator.
Das Verhalten ist undefiniert, wenn das zugrundeliegende std::variant-Mitgliedsobjekt var kein Objekt vom Typ I enthält, d.h. std::holds_alternative<I>(var) ist gleich false.
Sei it der von var gehaltene Iterator vom Typ I, d.h. std::get<I>(var).
1) Prä-Inkrement um eins. Äquivalent zu ++it; return *this;.
2) Post-Inkrement um eins
- Äquivalent zu: auto tmp = *this; ++*this; return tmp;, wenn I
forward_iteratormodelliert. - Äquivalent zu: return it++;, wenn die Variablendefinition auto&& ref = *it++; wohlgeformt ist, oder entweder
- std::indirectly_readable<I> oder
- std::constructible_from<std::iter_value_t<I>, std::iter_reference_t<I>> oder
- std::move_constructible<std::iter_value_t<I>>
- ist false.
- Äquivalent zu: postfix_proxy p(**this); ++*this; return p; andernfalls, wobei
postfix_proxyein Hilfstyp nur zur Darstellung ist (3).
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
1) *this
2) Eine Kopie von *this, die vor der Änderung erstellt wurde, oder ein Ergebnis des Post-Inkrements des zugrundeliegenden Iterators, oder ein Proxy, der den Wert des aktuellen Elements behält, wie oben beschrieben.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <algorithm> #include <initializer_list> #include <iostream> #include <iterator> int main() { const auto il = {1, 2, 3, 4, 5, 6}; using CI = std::common_iterator< std::counted_iterator<std::initializer_list<int>::iterator>, std::default_sentinel_t >; CI first{std::counted_iterator{std::begin(il), std::ssize(il) - 2}}; for (; first != std::default_sentinel; ++first) std::cout << *first << ' '; std::cout << '\n'; }
Ausgabe
1 2 3 4
[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 |
|---|---|---|---|
| P2259R1 | C++20 | Post-Inkrement könnte sein Ergebnis in mehr Situationen verwerfen | Eine Proxy-Klasse wird verwendet, um das Ergebnis zu speichern |
| LWG 3546 | C++20 | Die Initialisierung des Proxy-Objekts war manchmal nicht wohlgeformt | Situation und Definition angepasst |
| LWG 3574 | C++20 | variant war vollständig constexpr (P2231R1), aber common_iterator nicht |
wurde ebenfalls constexpr gemacht |
| LWG 3595 | C++20 | Funktionen des Proxy-Typs fehlten constexpr und noexcept | hinzugefügt |
[bearbeiten] Siehe auch
| berechnet die Distanz zwischen zwei Iterator-Adaptoren (Funktionstemplate) |