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(如果該限定 ID 表示一個型別),否則為 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++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3432 | C++20 | operator<=> 的返回型別不要求是比較類別型別 |
需要 |
LWG 3950 | C++20 | 仍然需要冗餘的額外過載 | 過載集已減少 |