std::strong_ordering
| definiert in Header <compare>
|
||
class strong_ordering; |
||
Die Klasse std::strong_ordering ist das Ergebnis eines 3-Wegevergleichs, der
- alle 6 Beziehungsoperatoren (==, !=, <, <=, >, >=) erlaubt.
- Ersetzbarkeit verlangt: Falls a äquivalent zu b ist, so ist f(a) auch äquivalent zu f(b), wobei f eine Funktion beschreibt, die nur vergleichsrelevante Zustände liest, die über öffentliche Objektendaten der Argumente zugreifbar sind. Äquivalente Werte sind ununterscheidbar.
- keine unvergleichbaren Werte erlaubt, d.h. genau eine Aussage von a < b, a == b oder a > b muß wahr sein.
Inhaltsverzeichnis
Konstanten
Der Typ std::strong_ordering besitzt vier Gültigkeitswerte, die als statische, konstante Objektdaten implementiert sind:
| Objektkonstanten | Definition |
less(inline constexpr) [statisch] |
ein Gültigkeitswert vom Typ std::strong_ordering, der eine kleiner-als-Beziehung (davor einordnen) beschreibt (public static Mitglied konstanten) |
equivalent(inline constexpr) [statisch] |
ein Gültigkeitswert vom Typ std::strong_ordering, der eine Äquivalenzbeziehung (weder davor noch danach einordnen) beschreibt. Das Gleiche wie equal. (public static Mitglied konstanten) |
equal(inline constexpr) [statisch] |
ein Gültigkeitswert vom Typ std::strong_ordering, der eine Äquivalenzbeziehung (weder davor noch danach einordnen) beschreibt. Das Gleiche wie equivalent. (public static Mitglied konstanten) |
greater(inline constexpr) [statisch] |
ein Gültigkeitswert vom Typ std::strong_ordering, der eine größer-als-Beziehung (danach einordnen) beschreibt (public static Mitglied konstanten) |
Konvertierungen
std::strong_ordering ist die Vergleichskategorie mit den stärksten Bedingungen.
Sie ist implizit nicht aus den anderen beiden Kategorien konvertierbar, aber läßt sich implizit in diese konvertieren.
| implizite Konvertierung nach std::partial_ordering (öffentliche Elementfunktion) |
std::strong_ordering::operator partial_ordering
<tbody> </tbody> constexpr operator partial_ordering() const noexcept; |
||
Rückgabewert
std::partial_ordering::less, falls v kleiner ist,
std::partial_ordering::greater, falls v größer ist, und
std::partial_ordering::equivalent, falls v gleich oder äquivalent ist.
| implizite Konvertierung nach std::weak_ordering (öffentliche Elementfunktion) |
std::strong_ordering::operator weak_ordering
<tbody> </tbody> constexpr operator weak_ordering() const noexcept; |
||
Rückgabewert
std::partial_ordering::less, falls v kleiner ist,
std::partial_ordering::greater, falls v größer ist, und
std::partial_ordering::equivalent, falls v gleich oder äquivalent ist.
Vergleiche
Vergleichsoperatoren sind definiert zwischen Werten dieses Typs und der generischen 0.
Dieses unterstützt Ausdrücke der Form a <=> b == 0 oder a <=> b < 0, welche benutzt werden können, um das Ergebnis des 3-Wegevergleichs in eine boolschen Beziehung zu bringen (hierzu auch std::is_eq, std::is_lt etc).
Diese Funktionen sind nicht sichtbar bei der normalen nicht qualifizierten oder qualifizierten Suche und {{#ifeq:YES|YES|können|kann} nur durch argumentenabhängige Suche gefunden werden, falls std::strong_ordering ein Klasse der Argumente ist.
Das Verhalten eines Programms, welches versucht {tt|strong_ordering}} mit etwas anderes als einer generischen 0 zu vergleichen, ist undefiniert.
vergleicht mit Null oder strong_ordering (Funktion) |
operator==
<tbody> </tbody> friend constexpr bool operator==(strong_ordering v, /*unspecified*/ u) noexcept; |
(1) | |
friend constexpr bool operator==(strong_ordering v, strong_ordering w) noexcept = default; |
(2) | |
Parameter
| v, w | - | ein Wert vom Typ std::strong_ordering zum Vergleich
|
| u | - | ein unbenutzter Parameter eines beliebigen Typs, der eine generische Null als Argument akzeptiert |
Rückgabewert
true, falls beide Parameter den selben Wert haben, ansonsten false. Hierbei ist gleich dasselbe wie äquivalent.
operator<
<tbody> </tbody> friend constexpr bool operator<(strong_ordering v, /*unspecified*/ u) noexcept; |
(1) | |
friend constexpr bool operator<(/*unspecified*/ u, strong_ordering v) noexcept; |
(2) | |
Parameter
| v, w | - | ein Wert vom Typ std::strong_ordering zum Vergleich
|
| u | - | ein unbenutzter Parameter eines beliebigen Typs, der eine generische Null als Argument akzeptiert |
Rückgabewert
true, falls v kleiner ist, und false, falls v äquivalent, equal oder größer ist.true, falls v größer ist, und false, falls v äquivalent, equal oder kleiner ist.
operator<=
<tbody> </tbody> friend constexpr bool operator<=(strong_ordering v, /*unspecified*/ u) noexcept; |
(1) | |
friend constexpr bool operator<=(/*unspecified*/ u, strong_ordering v) noexcept; |
(2) | |
Parameter
| v, w | - | ein Wert vom Typ std::strong_ordering zum Vergleich
|
| u | - | ein unbenutzter Parameter eines beliebigen Typs, der eine generische Null als Argument akzeptiert |
Rückgabewert
true, falls v kleiner, equal oder äquivalent ist, und false, falls v größer ist.true, falls v größer, oder äquivalent ist, und false, falls v kleiner ist.
operator>
<tbody> </tbody> friend constexpr bool operator>(strong_ordering v, /*unspecified*/ u) noexcept; |
(1) | |
friend constexpr bool operator>(/*unspecified*/ u, strong_ordering v) noexcept; |
(2) | |
Parameter
| v, w | - | ein Wert vom Typ std::strong_ordering zum Vergleich
|
| u | - | ein unbenutzter Parameter eines beliebigen Typs, der eine generische Null als Argument akzeptiert |
Rückgabewert
true, falls v größerr ist, und false, falls v äquivalent, oder kleiner ist.true, falls v kleiner ist, und false, falls v äquivalent, equal oder größer ist.
operator>=
<tbody> </tbody> friend constexpr bool operator>=(strong_ordering v, /*unspecified*/ u) noexcept; |
(1) | |
friend constexpr bool operator>=(/*unspecified*/ u, strong_ordering v) noexcept; |
(2) | |
Parameter
| v, w | - | ein Wert vom Typ std::strong_ordering zum Vergleich
|
| u | - | ein unbenutzter Parameter eines beliebigen Typs, der eine generische Null als Argument akzeptiert |
Rückgabewert
true, falls v größer, equal oder äquivalent ist, und false, falls v kleiner ist.true, falls v kleiner, equal oder äquivalent ist, und false, falls v größer ist.
operator<=>
<tbody> </tbody> friend constexpr strong_ordering operator<=>(strong_ordering v, /*unspecified*/ u) noexcept; |
(1) | |
friend constexpr strong_ordering operator<=>(/*unspecified*/ u, strong_ordering v) noexcept; |
(2) | |
Parameter
| v, w | - | ein Wert vom Typ std::strong_ordering zum Vergleich
|
| u | - | ein unbenutzter Parameter eines beliebigen Typs, der eine generische Null als Argument akzeptiert |
Rückgabewert
v.greater, falls v less ist, less, falls v greater ist, ansonsten v.
Beispiele
| This section is incomplete Reason: no example |
Referenzen
(C++20) |
das Ergebnis eines 3-Wegevergleichs, der alle 6 Operatoren unterstützt und nicht ersetzbar ist (Klasse) |
(C++20) |
der Ergebnistyp des 3-Wegevergleichs, der alle 6 Operatoren unterstützt, nicht ersetzbar ist und nichtvergleichbare Werte erlaubt (Klasse) |