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 | - | сравниваемые представления |
Возвращаемое значение
Сложность
Линейно по размеру представлений.
Примечания
|
Достаточное количество дополнительных перегрузок может быть реализовано через невыводимый контекст в одном типе параметра. |
(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 | избыточные дополнительные перегрузки всё ещё требовались | набор перегрузок сокращён |