operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)
| Definiert in Header <string_view>
|
||
template< class CharT, class Traits >
constexpr bool operator==( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(1) | (seit C++17) (bis C++20) |
template< class CharT, class Traits >
constexpr bool operator==(
std::basic_string_view<CharT,Traits> lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs ) noexcept;
|
(seit C++20) | |
template< class CharT, class Traits >
constexpr bool operator!=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(2) | (seit C++17) (bis C++20) |
template< class CharT, class Traits >
constexpr bool operator<( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(3) | (seit C++17) (bis C++20) |
template< class CharT, class Traits >
constexpr bool operator<=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(4) | (seit C++17) (bis C++20) |
template< class CharT, class Traits >
constexpr bool operator>( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(5) | (seit C++17) (bis C++20) |
template< class CharT, class Traits >
constexpr bool operator>=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(6) | (seit C++17) (bis C++20) |
template< class CharT, class Traits >
constexpr /*comp-cat*/ operator<=>(
std::basic_string_view<CharT,Traits> lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs ) noexcept;
|
(7) | (seit C++20) |
Vergleicht zwei Ansichten.
Alle Vergleiche erfolgen über die compare()-Mitgliedsfunktion (die selbst mittels Traits::compare() definiert ist):
- Zwei Ansichten sind gleich, wenn sowohl die Größe von
lhsals auch vonrhsgleich sind und jedes Zeichen inlhsein äquivalentes Zeichen inrhsan derselben Position hat.
- Die Ordnungsvergleiche erfolgen lexikografisch – der Vergleich wird mittels einer Funktion durchgeführt, die std::lexicographical_compare entspricht.
|
Die Implementierung stellt ausreichende zusätzliche |
(bis C++20) |
|
Der Rückgabetyp der Dreiwegevergleichsoperatoren ( Die Operatoren |
(seit C++20) |
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 |