operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)
| Definiert in 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 erfolgen über die Memberfunktion compare() (die selbst in Bezug auf Traits::compare() definiert ist)
- Zwei Ansichten sind gleich, wenn sowohl die Größe von lhs als auch von rhs gleich ist und jedes Zeichen in lhs ein äquivalentes Zeichen in rhs an derselben Position hat.
- Die Ordnungsvergleiche erfolgen lexikographisch – der Vergleich wird von einer Funktion durchgeführt, die äquivalent zu std::lexicographical_compare ist.
|
Die Implementierung stellt ausreichende zusätzliche |
(bis C++20) |
|
Der Rückgabetyp von Drei-Wege-Vergleichsoperatoren (/*comp-cat*/) ist Traits::comparison_category, wenn dieser qualifizierte Bezeichner einen Typ bezeichnet, andernfalls std::weak_ordering. Wenn /*comp-cat*/ kein Vergleichskategorietyp ist, ist das Programm schlecht geformt. Die Operatoren |
(seit C++20) |
Inhalt |
[edit] Parameter
| lhs, rhs | - | zu vergleichende Ansichten |
[edit] Rückgabewert
[edit] Komplexität
Linear bezüglich der Größe der Ansichten.
[edit] Hinweise
|
Ausreichende zusätzliche Überladungen können durch einen nicht ableitbaren Kontext in einem Parameter-Typ implementiert werden. |
(bis C++20) |
|
Der Drei-Wege-Vergleichsergebnistyp 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 den nicht ableitbaren Kontext verwendet, wodurch Argumente, die implizit in den String-View-Typ konvertierbar sind, mit dem String-View verglichen werden können. |
(seit C++20) |
[edit] 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."); }
[edit] 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 nicht zwingend ein Vergleichskategorietyp sein |
Gefordert |
| LWG 3950 | C++20 | redundante zusätzliche Überladungen waren immer noch erforderlich | Überladungssätze reduziert |