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 | - | 要比较的视图 |
返回值
复杂度
与视图大小成线性。
注解
充足的额外重载可通过一个参数类型中的非推导语境实现。 |
(C++20 前) |
std::string_view、std::wstring_view、std::u8string_view、std::u16string_view 与 std::u32string_view 的三路比较结果类型为 std::strong_ordering。 std::type_identity_t 用于非推导语境,使得可隐式转换为字符串视图类型的参数能与字符串视图比较。 |
(C++20 起) |
示例
#include <string_view> int main() { using namespace std::literals; static_assert(""sv == ""sv); static_assert(""sv == "", "C++20 前选择额外的重载。"); static_assert("" == ""sv, "C++20 前选择额外的重载。C++20 起使用重写候选。"); static_assert(!(""sv != ""sv), "C++20 起使用重写候选。"); static_assert(!(""sv != ""), "C++20 前选择额外的重载;C++20 起使用重写候选。"); static_assert(!("" != ""sv), "C++20 前选择额外的重载;C++20 起使用重写候选。"); }
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3432 | C++20 | 未要求 operator<=> 的返回类型为比较类别类型
|
已要求 |
LWG 3950 | C++20 | 仍然要求冗余的额外重载 | 减小重载集 |