operator==,!=,<,<=,>,>=,<=> (std::basic_string_view)
|
Определено в заголовке
<string_view>
|
||
| (1) | ||
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
==
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(начиная с C++17)
(до C++20) |
|
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
==
(
|
(начиная с C++20) | |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
!
=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(2) |
(начиная с C++17)
(до C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
<
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(3) |
(начиная с C++17)
(до C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
<=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(4) |
(начиная с C++17)
(до C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
>
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(5) |
(начиная с C++17)
(до C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
bool
operator
>=
(
std::
basic_string_view
<
CharT,Traits
>
lhs,
|
(6) |
(начиная с C++17)
(до C++20) |
|
template
<
class
CharT,
class
Traits
>
constexpr
/*comp-cat*/
operator
<=>
(
|
(7) | (начиная с C++20) |
Сравнивает два представления.
Все сравнения выполняются с помощью функции-члена
compare()
(которая сама определена в терминах
Traits::compare()
):
- Два представления равны, если размеры lhs и rhs равны и каждый символ в lhs имеет эквивалентный символ в rhs на той же позиции.
- Сравнения упорядочивания выполняются лексикографически – сравнение производится функцией, эквивалентной std::lexicographical_compare .
|
Реализация предоставляет достаточное количество дополнительных
|
(до C++20) |
|
Возвращаемый тип операторов трёхстороннего сравнения ( /*comp-cat*/ ) является Traits :: comparison_category , если этот квалифицированный идентификатор обозначает тип, иначе std::weak_ordering . Если /*comp-cat*/ не является типом категории сравнения, программа некорректна.
Операторы
|
(начиная с C++20) |
Содержание |
Параметры
| lhs, rhs | - | сравниваемые представления |
Возвращаемое значение
Сложность
Линейно по размеру представлений.
Примечания
|
Достаточное количество дополнительных перегрузок может быть реализовано через невыводимый контекст в одном типе параметра. |
(until C++20) |
|
Тип результата трёхстороннего сравнения для std::string_view , std::wstring_view , std::u8string_view , std::u16string_view и std::u32string_view является std::strong_ordering . std::type_identity_t используется для невыводимого контекста, что делает аргументы, неявно преобразуемые в тип string view, сравнимыми с string view. |
(since C++20) |
Пример
#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."); }
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 3432 | C++20 |
тип возвращаемого значения
operator<=>
не требовалось быть типом категории сравнения
|
требуется |
| LWG 3950 | C++20 | избыточные дополнительные перегрузки всё ещё требовались | набор перегрузок сокращён |