operator==,!=,<,<=,>,>=,<=> (std::basic_string_view)
|
Definido en el encabezado
<string_view>
|
||
| (1) | ||
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
==
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(desde C++17)
(hasta C++20) |
|
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
==
(
|
(desde C++20) | |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
!
=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(2) |
(desde C++17)
(hasta C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
<
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(3) |
(desde C++17)
(hasta C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
<=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(4) |
(desde C++17)
(hasta C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
>
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(5) |
(desde C++17)
(hasta C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
>=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(6) |
(desde C++17)
(hasta C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
/*comp-cat*/
operator
<=>
(
|
(7) | (desde C++20) |
Compara dos vistas.
Todas las comparaciones se realizan mediante la
compare()
función miembro (que a su vez está definida en términos de
Traits::compare()
):
- Dos vistas son iguales si tanto el tamaño de lhs como el de rhs son iguales y cada carácter en lhs tiene un carácter equivalente en rhs en la misma posición.
- Las comparaciones de ordenación se realizan lexicográficamente – la comparación se lleva a cabo mediante una función equivalente a std::lexicographical_compare .
|
La implementación proporciona sobrecargas adicionales suficientes
|
(hasta C++20) |
|
El tipo de retorno de los operadores de comparación de tres vías ( /*comp-cat*/ ) es Traits :: comparison_category si ese identificador calificado denota un tipo, de lo contrario es std::weak_ordering . Si /*comp-cat*/ no es un tipo de categoría de comparación, el programa está mal formado.
Los operadores
|
(desde C++20) |
Contenidos |
Parámetros
| lhs, rhs | - | vistas a comparar |
Valor de retorno
Complejidad
Lineal en el tamaño de las vistas.
Notas
|
Se pueden implementar sobrecargas adicionales suficientes mediante contexto no deducido en un tipo de parámetro. |
(until C++20) |
|
El tipo de resultado de comparación de tres vías de std::string_view , std::wstring_view , std::u8string_view , std::u16string_view y std::u32string_view es std::strong_ordering . std::type_identity_t se utiliza para contexto no deducido, lo que hace que los argumentos que son implícitamente convertibles al tipo string view sean comparables con el string view. |
(since C++20) |
Ejemplo
#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."); }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3432 | C++20 |
el tipo de retorno de
operator<=>
no estaba requerido que fuera un tipo de categoría de comparación
|
requerido |
| LWG 3950 | C++20 | aún se requerían sobrecargas adicionales redundantes | conjuntos de sobrecarga reducidos |