# operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)

< cpp‎ | string‎ | 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 起)
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::basic_string_view<CharT,Traits> rhs ) noexcept; | (7) | (C++20 起)

比较二个视图。

通过 compare() 成员函数进行所有比较（其自身以 `Traits::compare()` 定义）：

- 若 `lhs` 与 `rhs` 的大小相等且 `lhs` 中每个字符等于 `rhs` 在同一位置的字符，则二个视图相等。

- 比较顺序按字典序进行——由等价于 std::lexicographical_compare 的函数进行比较。

三路比较运算符的返回类型（ /*comp-cat*/ ）为 Traits::comparison_category ，若该有限定标识合法并指代类型，否则为 std::weak_ordering 。若 /*comp-cat*/ 不是比较类别类型，则程序非良构。 `<`、 `<=`、 `>`、 `>=` 及 `!=` 运算符分别从 `operator<=>` 与 `operator==` 合成。 | (C++20 起)

实现应对这些函数提供充足的额外 `constexpr` 及 `noexcept` 重载，以令 `basic_string_view<CharT,Traits>` 对象 `sv` 可以与另一带隐式转换成 `basic_string_view<CharT,Traits>` 的对象 `t` 比较，而且语义上与比较 `sv` 和 `basic_string_view<CharT,Traits>(t)` 相同。

### 参数

lhs, rhs | - | 要比较的视图

### 返回值

1-6) 若对应比较关系成立则为 true ，否则为 false 。
7) static_cast</*comp-cat*/>(lhs.compare(rhs) <=> 0) 。

### 复杂度

与视图大小成线性。

### 注解

充足的额外重载可通过一个参数类型中的非推导语境实现。

std::string_view 、 std::wstring_view 、 std::u8string_view 、 std::u16string_view 与 std::u32string_view 的三路比较结果类型为 std::strong_ordering 。 | (C++20 起)

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3432 | C++20 | 未要求 `operator<=>` 的返回类型为比较类别类型 | 已要求