operator==,!=,<,<=,>,>=,<=>(std::reverse_iterator)
| Definiert in Header <iterator> |
||
template< class Iter1, class Iter2 > bool operator==( const std::reverse_iterator<Iter1>& lhs, |
(1) | (constexpr seit C++17) |
template< class Iter1, class Iter2 > bool operator!=( const std::reverse_iterator<Iter1>& lhs, |
(2) | (constexpr seit C++17) |
template< class Iter1, class Iter2 > bool operator< ( const std::reverse_iterator<Iter1>& lhs, |
(3) | (constexpr seit C++17) |
template< class Iter1, class Iter2 > bool operator<=( const std::reverse_iterator<Iter1>& lhs, |
(4) | (constexpr seit C++17) |
template< class Iter1, class Iter2 > bool operator> ( const std::reverse_iterator<Iter1>& lhs, |
(5) | (constexpr seit C++17) |
template< class Iter1, class Iter2 > bool operator>=( const std::reverse_iterator<Iter1>& lhs, |
(6) | (constexpr seit C++17) |
| template< class Iter1, std::three_way_comparable_with<Iter1> Iter2 > constexpr std::compare_three_way_result_t<Iter1, Iter2> |
(7) | (seit C++20) |
Vergleicht die zugrundeliegenden Iteratoren von lhs und rhs.
- Das Ergebnis von Gleichheitsvergleichen wird beibehalten (d. h. gleiche zugrundeliegende Iteratoren implizieren gleiche Reverse-Iteratoren).
- Das Ergebnis von relationalen Vergleichen wird umgekehrt (d. h. ein größerer zugrundeliegender Iterator impliziert einen kleineren Reverse-Iterator).
|
1) Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn lhs.base() == rhs.base() wohlgeformt und in bool konvertierbar ist.
2) Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn lhs.base() != rhs.base() wohlgeformt und in bool konvertierbar ist.
3) Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn lhs.base() > rhs.base() wohlgeformt und in bool konvertierbar ist.
4) Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn lhs.base() >= rhs.base() wohlgeformt und in bool konvertierbar ist.
5) Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn lhs.base() < rhs.base() wohlgeformt und in bool konvertierbar ist.
6) Diese Überladung nimmt an der Überladungsauflösung teil, nur wenn lhs.base() <= rhs.base() wohlgeformt und in bool konvertierbar ist.
|
(seit C++20) |
Inhalt |
[edit] Parameter
| lhs, rhs | - | Iterator-Adapter zum Vergleichen |
[edit] Rückgabewert
[edit] Anmerkungen
operator<=> gibt rhs.base() <=> lhs.base() zurück und nicht lhs.base() <=> rhs.base(), da dies ein Reverse-Iterator ist.
[edit] Beispiel
#include <cassert> #include <iterator> int main() { int a[]{0, 1, 2, 3}; // ↑ └───── x, y // └──────── z // “x” and “y” are equal, but “x” is less than “z” (reversely) std::reverse_iterator<int*> x{std::rend(a) - std::size(a)}, y{std::rend(a) - std::size(a)}, z{std::rbegin(a) + 1}; // two-way comparisons assert( x == y ); assert(!(x != y)); assert(!(x < y)); assert( x <= y ); assert(!(x == z)); assert( x != z ); assert( x < z ); assert( x <= z ); // three-way comparisons assert( x <=> y == 0 ); assert(!(x <=> y < 0)); assert(!(x <=> y > 0)); assert(!(x <=> z == 0)); assert( x <=> z < 0 ); assert(!(x <=> z > 0)); }
[edit] 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 |
|---|---|---|---|
| LWG 280 | C++98 | heterogene Zuweisung war nicht erlaubt | erlaubt |