std::partial_ordering
| Definiert in der Header-Datei <compare> |
||
| class partial_ordering; |
(seit C++20) | |
Der Klassentyp std::partial_ordering ist der Ergebnistyp eines Dreifachvergleichs, der
- alle sechs relationalen Operatoren (
==,!=,<,<=,>,>=) zulässt.
- Keine Substituierbarkeit impliziert: Wenn a äquivalent zu b ist, muss f(a) nicht notwendigerweise äquivalent zu f(b) sein, wobei f eine Funktion bezeichnet, die nur vergleichsrelevante Zustände liest, die über die öffentlichen const-Member des Arguments zugänglich sind. Anders ausgedrückt: Äquivalente Werte können unterscheidbar sein.
- Ungenordnete Werte zulässt: a < b, a == b und a > b können alle false sein.
Inhalt |
[edit] Konstanten
Der Typ std::partial_ordering hat vier gültige Werte, die als const static Datenmember seines Typs implementiert sind
| Name | Definition |
| inline constexpr std::partial_ordering less [static] |
ein gültiger Wert, der eine Kleiner-als-Beziehung (geordnet davor) angibt (öffentliche statische Member-Konstante) |
| inline constexpr std::partial_ordering equivalent [static] |
ein gültiger Wert, der Äquivalenz anzeigt (weder geordnet davor noch geordnet danach) (öffentliche statische Member-Konstante) |
| inline constexpr std::partial_ordering greater [static] |
ein gültiger Wert, der eine Größer-als-Beziehung (geordnet danach) angibt (öffentliche statische Member-Konstante) |
| inline constexpr std::partial_ordering unordered [static] |
ein gültiger Wert, der eine Beziehung zu einem ungenordeten Wert anzeigt (öffentliche statische Member-Konstante) |
[edit] Konvertierungen
std::partial_ordering kann nicht implizit in andere Vergleichskategorietypen konvertiert werden, während sowohl std::strong_ordering als auch std::weak_ordering implizit in partial_ordering konvertierbar sind.
[edit] Vergleiche
Vergleichsoperatoren sind zwischen Werten dieses Typs und dem Literal 0 definiert. Dies unterstützt die Ausdrücke a <=> b == 0 oder a <=> b < 0, die verwendet werden können, um das Ergebnis eines Drei-Wege-Vergleichsoperators in eine boolesche Beziehung umzuwandeln; siehe std::is_eq, std::is_lt usw.
Diese Funktionen sind nicht für normale nicht-qualifizierte oder qualifizierte Suche sichtbar und können nur durch Argument-abhängige Suche gefunden werden, wenn std::partial_ordering eine zu den Argumenten assoziierte Klasse ist.
Das Verhalten eines Programms, das versucht, ein partial_ordering mit etwas anderem als dem Ganzzahl-Literal 0 zu vergleichen, ist undefiniert.
| operator==operator<operator>operator<=operator>=operator<=> |
vergleicht mit Null oder einem partial_ordering(Funktion) |
operator==
| friend constexpr bool operator==( partial_ordering v, /*unspecified*/ u ) noexcept; |
(1) | |
| friend constexpr bool operator==( partial_ordering v, partial_ordering w ) noexcept = default; |
(2) | |
Parameter
| v, w | - | std::partial_ordering Werte zum Prüfen |
| u | - | ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert |
Rückgabewert
v equivalent ist, false wenn v less, greater oder unordered istoperator<
| friend constexpr bool operator<( partial_ordering v, /*unspecified*/ u ) noexcept; |
(1) | |
| friend constexpr bool operator<( /*unspecified*/ u, partial_ordering v ) noexcept; |
(2) | |
Parameter
| v | - | ein std::partial_ordering Wert zum Prüfen |
| u | - | ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert |
Rückgabewert
v less ist, und false wenn v greater, equivalent oder unordered istv greater ist, und false wenn v less, equivalent oder unordered istoperator<=
| friend constexpr bool operator<=( partial_ordering v, /*unspecified*/ u ) noexcept; |
(1) | |
| friend constexpr bool operator<=( /*unspecified*/ u, partial_ordering v ) noexcept; |
(2) | |
Parameter
| v | - | ein std::partial_ordering Wert zum Prüfen |
| u | - | ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert |
Rückgabewert
v less oder equivalent ist, und false wenn v greater oder unordered istv greater oder equivalent ist, und false wenn v less oder unordered istoperator>
| friend constexpr bool operator>( partial_ordering v, /*unspecified*/ u ) noexcept; |
(1) | |
| friend constexpr bool operator>( /*unspecified*/ u, partial_ordering v ) noexcept; |
(2) | |
Parameter
| v | - | ein std::partial_ordering Wert zum Prüfen |
| u | - | ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert |
Rückgabewert
v greater ist, und false wenn v less, equivalent oder unordered istv less ist, und false wenn v greater, equivalent oder unordered istoperator>=
| friend constexpr bool operator>=( partial_ordering v, /*unspecified*/ u ) noexcept; |
(1) | |
| friend constexpr bool operator>=( /*unspecified*/ u, partial_ordering v ) noexcept; |
(2) | |
Parameter
| v | - | ein std::partial_ordering Wert zum Prüfen |
| u | - | ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert |
Rückgabewert
v greater oder equivalent ist, und false wenn v less oder unordered istv less oder equivalent ist, und false wenn v greater oder unordered istoperator<=>
| friend constexpr partial_ordering operator<=>( partial_ordering v, /*unspecified*/ u ) noexcept; |
(1) | |
| friend constexpr partial_ordering operator<=>( /*unspecified*/ u, partial_ordering v ) noexcept; |
(2) | |
Parameter
| v | - | ein std::partial_ordering Wert zum Prüfen |
| u | - | ein unbenutzter Parameter beliebigen Typs, der ein Literal-Null-Argument akzeptiert |
Rückgabewert
greater, wenn v less ist, less, wenn v greater ist, andernfalls v.[edit] Hinweise
Der eingebaute operator<=> zwischen Gleitkommawerten verwendet diese Ordnung: das positive Null und das negative Null vergleichen sich als equivalent, können aber unterschieden werden, und NaN-Werte vergleichen sich als unordered mit jedem anderen Wert.
[edit] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[edit] Siehe auch
| (C++20) |
der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt und substituierbar ist (Klasse) |
| (C++20) |
der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt und nicht substituierbar ist (Klasse) |