operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)
Определено в заголовочном файле <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) |
(начиная с C++17) (до 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;
| (начиная с 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) | (начиная с C++17) (до 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) | (начиная с C++17) (до 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) | (начиная с C++17) (до 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) | (начиная с C++17) (до 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) | (начиная с C++17) (до 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) | (начиная с C++20) |
Сравнивает два представления.
Все сравнения выполняются с помощью функции-члена compare() (которая сама определена через Traits::compare()):
- Два представления равны, если размеры
lhsиrhsравны и каждому символу вlhsсоответствует эквивалентный символ вrhsв той же позиции. - Сравнения порядка выполняются лексикографически — сравнение производится функцией, эквивалентной
std::lexicographical_compare.
| Реализация предоставляет достаточное количество дополнительных перегрузок | (до C++20) |
| Возвращаемый тип операторов трёхстороннего сравнения ( Операторы | (начиная с C++20) |
Параметры
| lhs, rhs | - | представления для сравнения |
Возвращаемое значение
true, если соответствующее условие сравнения выполняется, и false в противном случае.static_cast</*comp-cat*/>(lhs.compare(rhs) <=> 0).Сложность
Линейная относительно размера представлений.
Примечания
| Достаточное количество дополнительных перегрузок можно реализовать, используя недедуцируемый контекст в типе одного из параметров. | (до C++20) |
| Тип результата трёхстороннего сравнения для Для недедуцируемого контекста используется | (начиная с 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 | дополнительные избыточные перегрузки по-прежнему требовались | наборы перегрузок сокращены |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string_view/operator_cmp