std:: totally_ordered, std:: totally_ordered_with
|
Definiert im Header
<concepts>
|
||
|
template
<
class
T
>
Konzept total_geordnet
=
|
(1) | (seit C++20) |
|
template
<
class
T,
class
U
>
Konzept totally_ordered_with
=
|
(2) | (seit C++20) |
|
Hilfskonzepte
|
||
|
template
<
class
T,
class
U
>
Konzept __PartiallyOrderedWith
=
|
(3) | ( Nur zur Darstellung* ) |
std::totally_ordered
spezifiziert, dass die Vergleichsoperatoren
==,!=,<,>,<=,>=
für einen Typ Ergebnisse liefern, die mit einer
strengen Totalordnung
auf dem Typ konsistent sind.
std::totally_ordered_with
spezifiziert, dass die Vergleichsoperatoren
==,!=,<,>,<=,>=
auf (möglicherweise gemischten)
T
und
U
Operanden Ergebnisse liefern, die mit einer strengen Totalordnung konsistent sind. Der Vergleich gemischter Operanden liefert Ergebnisse, die äquivalent zum Vergleich der in ihren gemeinsamen Typ konvertierten Operanden sind.
__PartiallyOrderedWith
spezifiziert, dass ein Wert vom Typ
T
und ein Wert vom Typ
U
in einer partiellen Ordnung miteinander verglichen werden können (in beliebiger Reihenfolge) unter Verwendung von
<
,
>
,
<=
, und
>=
, und die Ergebnisse der Vergleiche konsistent sind.
Inhaltsverzeichnis |
Semantische Anforderungen
Diese Konzepte sind nur modelliert, wenn sie erfüllt sind und alle Konzepte, die sie subsumieren, modelliert sind.
a
,
b
und
c
vom Typ
const
std::
remove_reference_t
<
T
>
gilt:
- Genau einer der Ausdrücke bool ( a < b ) , bool ( a > b ) und bool ( a == b ) ist true ;
- Wenn bool ( a < b ) und bool ( b < c ) beide true sind, dann ist bool ( a < c ) ebenfalls true ;
- bool ( a > b ) == bool ( b < a )
- bool ( a >= b ) == ! bool ( a < b )
- bool ( a <= b ) == ! bool ( b < a )
-
tundt2, Lvalues, die unterschiedliche gleiche Objekte der Typen const std:: remove_reference_t < T > und std:: remove_reference_t < T > bezeichnen, und -
uundu2, Lvalues, die unterschiedliche gleiche Objekte der Typen const std:: remove_reference_t < U > und std:: remove_reference_t < U > bezeichnen,
Sei
C
std::
common_reference_t
<
const
std::
remove_reference_t
<
T
>
&
,
const
std::
remove_reference_t
<
U
>
&
>
, und für einen Ausdruck
E
und einen Typ
C
sei
CONVERT_TO
<
C
>
(
E
)
definiert als:
|
(bis C++23) |
|
(seit C++23) |
Folgendes trifft zu:
- bool ( t < u ) == bool ( CONVERT_TO < C > ( t2 ) < CONVERT_TO < C > ( u2 ) )
- bool ( t > u ) == bool ( CONVERT_TO < C > ( t2 ) > CONVERT_TO < C > ( u2 ) )
- bool ( t <= u ) == bool ( CONVERT_TO < C > ( t2 ) <= CONVERT_TO < C > ( u2 ) )
- bool ( t >= u ) == bool ( CONVERT_TO < C > ( t2 ) >= CONVERT_TO < C > ( u2 ) )
- bool ( u < t ) == bool ( CONVERT_TO < C > ( u2 ) < CONVERT_TO < C > ( t2 ) )
- bool ( u > t ) == bool ( CONVERT_TO < C > ( u2 ) > CONVERT_TO < C > ( t2 ) )
- bool ( u <= t ) == bool ( CONVERT_TO < C > ( u2 ) <= CONVERT_TO < C > ( t2 ) )
- bool ( u >= t ) == bool ( CONVERT_TO < C > ( u2 ) >= CONVERT_TO < C > ( t2 ) )
-
jeden Lvalue
tvom Typ const std:: remove_reference_t < T > , und -
jeden Lvalue
uvom Typ const std:: remove_reference_t < U > ,
Folgendes zutrifft:
- t < u , t <= u , t > u , t >= u , u < t , u <= t , u > t , und u >= t denselben Definitionsbereich haben;
- bool ( t < u ) == bool ( u > t ) ;
- bool ( u < t ) == bool ( t > u ) ;
- bool ( t <= u ) == bool ( u >= t ) ; und
- bool ( u <= t ) == bool ( t >= u ) .
Gleichheitserhaltung
Ausdrücke, die in requires expressions der Standardbibliothek-Konzepte deklariert werden, müssen equality-preserving sein (sofern nicht anders angegeben).
Implizite Ausdrucksvarianten
Ein requires -Ausdruck , der einen Ausdruck verwendet, der für einen konstanten Lvalue-Operanden nicht-modifizierend ist, erfordert ebenfalls implizite Ausdrucksvarianten .
Referenzen
- C++23-Standard (ISO/IEC 14882:2024):
-
-
18.5.5 Konzept
totally_ordered[concept.totallyordered]
-
18.5.5 Konzept
- C++20-Standard (ISO/IEC 14882:2020):
-
-
18.5.4 Konzept
totally_ordered[concept.totallyordered]
-
18.5.4 Konzept
Siehe auch
|
spezifiziert, dass der Operator
<=>
konsistente Ergebnisse für gegebene Typen liefert
(Konzept) |