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 == "", "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 | 仍然需要冗余的额外重载 | 重载集减少 |