operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)
| ヘッダ <string_view>
|
||
template< class CharT, class Traits >
constexpr bool operator==( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
で定義 (1) | (C++17以上) (C++20まで) |
template< class CharT, class Traits >
constexpr bool operator==(
std::basic_string_view<CharT,Traits> lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs ) noexcept;
|
(C++20以上) | |
template< class CharT, class Traits >
constexpr bool operator!=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(2) | (C++17以上) (C++20まで) |
template< class CharT, class Traits >
constexpr bool operator<( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(3) | (C++17以上) (C++20まで) |
template< class CharT, class Traits >
constexpr bool operator<=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(4) | (C++17以上) (C++20まで) |
template< class CharT, class Traits >
constexpr bool operator>( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(5) | (C++17以上) (C++20まで) |
template< class CharT, class Traits >
constexpr bool operator>=( std::basic_string_view<CharT,Traits> lhs,
std::basic_string_view<CharT,Traits> rhs ) noexcept;
|
(6) | (C++17以上) (C++20まで) |
template< class CharT, class Traits >
constexpr /*comp-cat*/ operator<=>(
std::basic_string_view<CharT,Traits> lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs ) noexcept;
|
(7) | (C++20以上) |
2つのビューを比較します。
すべての比較は compare() メンバ関数(これ自体は Traits::compare() に基づいて定義されています)を介して行われます。
- 2つのビューが等しいのは、
lhsとrhsのサイズが等しく、かつlhsの各文字がrhsの同じ位置に相当する文字を持つ場合です。
- 順序比較は辞書順で行われます。比較は std::lexicographical_compare と同等の関数によって実行されます。
|
実装は、 |
(C++20まで) |
|
三方比較演算子(
|
(C++20以上) |
パラメータ
| lhs, rhs | - | 比較対象のビュー |
戻り値
計算量
ビューのサイズに対して線形。
注記
|
非推定コンテキストを用いた1つのパラメータ型を通じて、十分な追加オーバーロードを実装できます。 |
(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 == "", "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++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3432 | C++20 |
operator<=> の戻り値型が比較カテゴリ型であることが要求されていなかった
|
要求されるようになった |
| LWG 3950 | C++20 | 冗長な追加オーバーロードが依然として要求されていた | オーバーロードセットが削減された |