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 | - | 待比较的视图 |
返回值
复杂度
与视图大小呈线性关系。
备注
|
通过在一个参数类型中使用非推导上下文,可以实现足够的额外重载。 |
(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 实现非推导上下文,使得可隐式转换为字符串视图类型的实参能够与字符串视图进行比较。 |
(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++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3432 | C++20 |
operator<=>
的返回类型未被要求必须是比较类别类型
|
要求必须是 |
| LWG 3950 | C++20 | 仍然要求存在冗余的额外重载 | 重载集合已精简 |