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` の同じ位置にある文字と等価である場合、2つのビューは等しいとみなされます。
- 順序比較は辞書順に行われます。比較は、std::lexicographical_compare と同等の関数によって実行されます。
|
実装では、`basic_string_view |
(C++20まで) |
|
3項比較演算子(/*comp-cat*/)の戻り値の型は、その修飾IDが型を示す場合は Traits::comparison_category、それ以外の場合は std::weak_ordering です。/*comp-cat*/ が比較カテゴリ型でない場合、プログラムは不適格です。
|
(C++20以降) |
目次 |
[edit] パラメータ
| lhs, rhs | - | 比較するビュー |
[edit] 戻り値
[edit] 計算量
ビューのサイズに対して線形。
[edit] 注記
|
推論されないコンテキストで十分な追加オーバーロードを実装できます。 |
(C++20まで) |
|
std::string_view, std::wstring_view, std::u8string_view, std::u16string_view, std::u32string_view の3項比較の結果型は std::strong_ordering です。 std::type_identity_t は推論されないコンテキストに使用され、文字列ビュー型に暗黙的に変換可能な引数を文字列ビューと比較できるようにします。 |
(C++20以降) |
[edit] 例
#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."); }
[edit] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3432 | C++20 | operator<=> の戻り値の型は比較カテゴリ型である必要はありませんでした。 |
必要 |
| LWG 3950 | C++20 | 冗長な追加オーバーロードがまだ必要でした。 | オーバーロードセットが縮小されました。 |