Namensräume
Varianten
Aktionen

std::weak_order

Von cppreference.com
< cpp‎ | utility
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
weak_order
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
Definiert in der Header-Datei <compare>
inline namespace /* nicht spezifiziert */ {

    inline constexpr /* nicht spezifiziert */ weak_order = /* nicht spezifiziert */;

}
(seit C++20)
Aufruf-Signatur
template< class T, class U >

    requires /* siehe unten */

constexpr std::weak_ordering weak_order(T&& t, U&& u) noexcept(/* siehe unten */);

Vergleicht zwei Werte mittels 3-Wege-Vergleich und erzeugt ein Ergebnis vom Typ std::weak_ordering.

Seien t und u Ausdrücke und T bzw. U bezeichnen decltype((t)) und decltype(u)), so ist std::weak_order(t, u) ausdrucksäquivalent zu

  • Wenn std::is_same_v<std::decay_t<T>, std::decay_t<U>> true ist
    • std::weak_ordering(weak_order(t, u)), falls es sich um einen wohlgeformten Ausdruck handelt, wobei die Überladungsauflösung in einem Kontext durchgeführt wird, der keine Deklaration von std::weak_order einschließt,
    • andernfalls, falls T ein Gleitkommatyp ist
      • falls std::numeric_limits<T>::is_iec559 true ist, wird der schwache Ordnungsvergleich von Gleitkommawerten (siehe unten) durchgeführt und dieses Ergebnis als Wert vom Typ std::weak_ordering zurückgegeben,
      • andernfalls wird ein Wert vom Typ std::weak_ordering geliefert, der konsistent mit der durch die Vergleichsoperatoren von T beobachteten Ordnung ist,
    • andernfalls, std::weak_ordering(std::compare_three_way()(t, u)), falls dies wohlgeformt ist,
    • andernfalls, std::weak_ordering(std::strong_order(t, u)), falls dies wohlgeformt ist.
  • In allen anderen Fällen ist der Ausdruck ill-formed, was zu einem Substitutionsfehler führen kann, wenn er im unmittelbaren Kontext einer Template-Instanziierung auftritt.

Inhalt

Customization Point Objects

Der Name std::weak_order bezeichnet ein Customization Point Object, das ein const Funktionsobjekt eines literal semiregular-Klassentyps ist. Zu Auslegungszwecken wird die cv-unqualifizierte Version seines Typs als __weak_order_fn bezeichnet.

Alle Instanzen von __weak_order_fn sind gleich. Die Effekte des Aufrufs unterschiedlicher Instanzen vom Typ __weak_order_fn mit denselben Argumenten sind äquivalent, unabhängig davon, ob der Ausdruck, der die Instanz bezeichnet, ein lvalue oder rvalue ist, und ob er const-qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Daher kann std::weak_order frei kopiert werden und seine Kopien können austauschbar verwendet werden.

Gegeben sei eine Menge von Typen Args.... Wenn std::declval<Args>()... die Anforderungen für Argumente an std::weak_order oben erfüllen, dann modelliert __weak_order_fn

Andernfalls nimmt kein operator() von __weak_order_fn an der Überladungsauflösung teil.

[bearbeiten] Strikte schwache Ordnung von IEEE-Gleitkommatypen

Seien x und y Werte desselben IEEE-Gleitkommatyps und weak_order_less(x, y) sei das boolesche Ergebnis, das angibt, ob x in der durch den C++-Standard definierten strikten schwachen Ordnung y vorangeht.

  • Wenn weder x noch y NaN ist, dann ist weak_order_less(x, y) == true genau dann, wenn x < y ist, d.h. alle Darstellungen desselben Gleitkommawerts sind äquivalent;
  • Wenn x negatives NaN und y kein negatives NaN ist, dann ist weak_order_less(x, y) == true;
  • Wenn x kein positives NaN und y positives NaN ist, dann ist weak_order_less(x, y) == true;
  • Wenn sowohl x als auch y NaNs mit demselben Vorzeichen sind, dann ist (weak_order_less(x, y) || weak_order_less(y, x)) == false, d.h. alle NaNs mit demselben Vorzeichen sind äquivalent.

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

der Ergebnistyp des 3-Wege-Vergleichs, der alle 6 Operatoren unterstützt und nicht substituierbar ist
(Klasse) [edit]
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::strong_ordering
(Customization Point Objekt)[edit]
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::partial_ordering
(Customization Point Objekt)[edit]
führt einen 3-Wege-Vergleich durch und erzeugt ein Ergebnis vom Typ std::weak_ordering, auch wenn operator<=> nicht verfügbar ist
(Customization Point Objekt)[edit]