operator==,!=,<,<=,>,>=,<=> (std::basic_string_view)
|
Definiert im Header
<string_view>
|
||
| (1) | ||
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
==
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(seit C++17)
(bis C++20) |
|
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
==
(
|
(seit C++20) | |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
!
=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(2) |
(seit C++17)
(bis C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
<
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(3) |
(seit C++17)
(bis C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
<=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(4) |
(seit C++17)
(bis C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
>
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(5) |
(seit C++17)
(bis C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
>=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(6) |
(seit C++17)
(bis C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
/*comp-cat*/
operator
<=>
(
|
(7) | (seit C++20) |
Vergleicht zwei Ansichten.
Alle Vergleiche werden über die
compare()
Memberfunktion durchgeführt (die selbst in Form von
Traits::compare()
definiert ist):
- Zwei Ansichten sind gleich, wenn sowohl die Größe von lhs als auch rhs gleich sind und jedes Zeichen in lhs ein äquivalentes Zeichen in rhs an derselben Position hat.
- Die Ordnungsvergleiche werden lexikographisch durchgeführt – der Vergleich wird von einer Funktion ausgeführt, die äquivalent zu std::lexicographical_compare ist.
|
Die Implementierung stellt ausreichend zusätzliche
|
(bis C++20) |
|
Der Rückgabetyp der Drei-Wege-Vergleichsoperatoren ( /*comp-cat*/ ) ist Traits :: comparison_category , falls dieser qualifizierte Bezeichner einen Typ bezeichnet, andernfalls std::weak_ordering . Wenn /*comp-cat*/ kein Vergleichskategorietyp ist, ist das Programm fehlerhaft.
Die Operatoren
|
(seit C++20) |
Inhaltsverzeichnis |
Parameter
| lhs, rhs | - | zu vergleichende Views |
Rückgabewert
Komplexität
Linear in der Größe der Ansichten.
Hinweise
|
Ausreichend zusätzliche Überladungen können durch nicht abgeleiteten Kontext in einem Parametertyp implementiert werden. |
(until C++20) |
|
Der Drei-Wege-Vergleichsresultattyp von std::string_view , std::wstring_view , std::u8string_view , std::u16string_view und std::u32string_view ist std::strong_ordering . std::type_identity_t wird für nicht abgeleiteten Kontext verwendet, was Argumente, die implizit in den String-View-Typ konvertierbar sind, mit dem String-View vergleichbar macht. |
(since C++20) |
Beispiel
#include <string_view> int main() { using namespace std::literals; static_assert(""sv == ""sv); static_assert(""sv == "", "Selects an additional overload until C++20."); static_assert("" == ""sv, "Selects an additional overload until C++20." "Uses a rewritten candidate since C++20."); static_assert(!(""sv != ""sv), "Uses the rewritten candidate since C++20."); static_assert(!(""sv != ""), "Selects an additional overload until C++20;" "Uses a rewritten candidate since C++20."); static_assert(!("" != ""sv), "Selects an additional overload until C++20." "Uses a rewritten candidate since C++20."); }
` Tags wurde nicht übersetzt - C++-spezifische Begriffe wie "overload", "static_assert", etc. wurden nicht übersetzt - Die Textstruktur und Anordnung wurde exakt beibehalten
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3432 | C++20 |
der Rückgabetyp von
operator<=>
musste kein Vergleichskategorietyp sein
|
erforderlich |
| LWG 3950 | C++20 | redundante zusätzliche Überladungen waren weiterhin erforderlich | Überladungsmengen reduziert |