std::experimental::ranges::equal_to
| Definiert in Header <experimental/ranges/functional> |
||
| template< class T = void > erfordert EqualityComparable<T> || |
(Ranges TS) | |
| template<> struct equal_to<void>; |
(Ranges TS) | |
Funktionsobjekt zur Durchführung von Vergleichen. Die primäre Vorlage ruft operator == für const Lvalues vom Typ T auf. Die Spezialisierung equal_to<void> leitet die Parametertypen des Funktionsaufrufoperators aus den Argumenten ab (nicht jedoch den Rückgabetyp).
Alle Spezialisierungen von equal_to sind Semiregular.
Inhalt |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition |
is_transparent (nur Mitglied der Spezialisierung equal_to<void>) |
/* nicht spezifiziert */ |
[bearbeiten] Member-Funktionen
| operator() |
prüft, ob die Argumente gleich sind (öffentliche Memberfunktion) |
std::experimental::ranges::equal_to::operator()
| constexpr bool operator()(const T& x, const T& y) const; |
(1) | (nur Mitglied der primären Vorlage equal_to<T>) |
| template< class T, class U > erfordert EqualityComparableWith<T, U> || |
(2) | (nur Mitglied der Spezialisierung equal_to<void>) |
t und u. Äquivalent zu return std::forward<T>(t) == std::forward<U>(u);, außer wenn dieser Ausdruck zu einem Aufruf eines eingebauten operator == aufgelöst wird, der Zeiger vergleicht.Wenn ein Aufruf von (1) oder (2) einen eingebauten Operator aufrufen würde, der Zeiger vom Typ P vergleicht, wird das Ergebnis stattdessen wie folgt bestimmt:
- Gibt false zurück, wenn der (möglicherweise konvertierte) Wert des ersten Arguments und der (möglicherweise konvertierte) Wert des zweiten Arguments in der implementierungsdefinierten strengen Totalordnung über alle Zeigerwerte vom Typ
Pvoneinander vorrangig sind. Diese strenge Totalordnung ist konsistent mit der partiellen Ordnung, die durch die eingebauten Operatoren<,>,<=und>=auferlegt wird. - Andernfalls (keines ist vorrangig vor dem anderen), gibt true zurück.
Das Verhalten ist undefiniert, es sei denn, die Konvertierungssequenzen von sowohl T als auch U nach P sind gleichheitserhaltend (siehe unten).
[bearbeiten] Gleichheitserhaltung
Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).
Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.
[bearbeiten] Hinweise
Im Gegensatz zu std::equal_to erfordert ranges::equal_to, dass sowohl == als auch != gültig sind (über die Beschränkungen EqualityComparable und EqualityComparableWith).
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| Funktions-Objekt, das x == y implementiert (Klassen-Template) |