operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)
在标头 <string_view> 定义 | ||
(1) | ||
template<class CharT, class Traits > constexprbool operator==(std::basic_string_view<CharT,Traits> lhs, | (C++17 起) (C++20 前) | |
template<class CharT, class Traits > constexprbool operator==( | (C++20 起) | |
template<class CharT, class Traits > constexprbool operator!=(std::basic_string_view<CharT,Traits> lhs, | (2) | (C++17 起) (C++20 前) |
template<class CharT, class Traits > constexprbool operator<(std::basic_string_view<CharT,Traits> lhs, | (3) | (C++17 起) (C++20 前) |
template<class CharT, class Traits > constexprbool operator<=(std::basic_string_view<CharT,Traits> lhs, | (4) | (C++17 起) (C++20 前) |
template<class CharT, class Traits > constexprbool operator>(std::basic_string_view<CharT,Traits> lhs, | (5) | (C++17 起) (C++20 前) |
template<class CharT, class Traits > constexprbool 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(){usingnamespace 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 | 仍然要求冗余的额外重载 | 减小重载集 |