std::ranges::less
| Definiert in der Header-Datei <functional> |
||
| struct less; |
(seit C++20) | |
Funktionsobjekt für Vergleiche. Leitet die Parametertypen des Funktionsaufrufoperators aus den Argumenten ab (nicht jedoch den Rückgabetyp).
Inhalt |
[bearbeiten] Verschachtelte Typen
| Verschachtelter Typ | Definition |
is_transparent
|
nicht spezifiziert |
[bearbeiten] Memberfunktionen
| operator() |
prüft, ob das erste Argument kleiner ist als das zweite (öffentliche Memberfunktion) |
std::ranges::less::operator()
| template< class T, class U > constexpr bool operator()( T&& t, U&& u ) const; |
||
Gegeben den Ausdruck std::forward<T>(t) < std::forward<U>(u) als expr
- Wenn expr zu einem Aufruf des integrierten operator< führt, der Zeiger vergleicht, gegeben den zusammengesetzten Zeigertyp von t und u als
P
- Wenn der konvertierte t dem konvertierten u (beide vom Typ
P) in der implementierungsdefinierten strikten Totalordnung über Zeigern vorausgeht, gibt true zurück, andernfalls gibt er false zurück. - Wenn die Konvertierungssequenz von
TnachPoder die Konvertierungssequenz vonUnachPnicht equality-preserving ist, ist das Verhalten undefiniert.
- Wenn der konvertierte t dem konvertierten u (beide vom Typ
- Andernfalls
- Gibt das Ergebnis von expr zurück.
- Wenn std::totally_ordered_with<T, U> nicht modelliert ist, ist das Verhalten undefiniert.
Diese Überladung nimmt nur an der Overload Resolution teil, wenn std::totally_ordered_with<T, U> erfüllt ist.
Wenn ein Ausdruck expr1 vom Typ T und ein Ausdruck expr2 vom Typ U existieren, so dass die Vergleichsergebnisse von expr1 und expr2 die strikte Totalordnung verletzen (die Regeln sind unten definiert), ist das Verhalten undefiniert.
Die Vergleichsergebnisse von expr1 und expr2 folgen der strikten Totalordnung nur, wenn **genau einer** der folgenden Ausdrücke true ist
- std::ranges::less{}(expr1, expr2)
- std::ranges::less{}(expr2, expr1)
- std::ranges::equal_to{}(expr1, expr2)
[bearbeiten] Hinweise
Im Gegensatz zu std::less erfordert std::ranges::less, dass alle sechs Vergleichsoperatoren <, <=, >, >=, == und != gültig sind (über die totally_ordered_with-Einschränkung).
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[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 |
|---|---|---|---|
| LWG 3530 | C++20 | syntaktische Prüfungen wurden beim Vergleichen von Zeigern gelockert | nur semantische Anforderungen sind gelockert |
[bearbeiten] Siehe auch
| Funktions-Objekt, das x < y implementiert (Klassen-Template) |