Namespaces
Variants

operator==,!=,<,<=,>,>=,<=>(std::basic_string_view)

ja.cppreference.net より
 
 
 
 
ヘッダ <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 と同等の関数によって実行されます。

実装は、constexpr オブジェクト '''noexcept''' が basic_string_view<CharT,Traits> への暗黙の変換を行う別のオブジェクト '''sv''' と比較されるように、これらの関数に対して十分な追加の t および basic_string_view<CharT,Traits> オーバーロードを提供し、その意味は '''sv''' と '''basic_string_view<CharT,Traits>(t)''' を比較するのと同じです。

(C++20まで)

三方比較演算子(/*comp-cat*/)の戻り値の型は、そのqualified-idが型を示す場合は Traits::comparison_category、それ以外の場合は std::weak_ordering です。/*comp-cat*/ が比較カテゴリ型でない場合、プログラムは ill-formed です。

<, <=, >, >=, != 演算子は、それぞれ および から operator<=>合成operator==されます。

(C++20以上)

パラメータ

lhs, rhs - 比較対象のビュー

戻り値

1-6) true 対応する比較が成立する場合は、 false それ以外の場合。
7) static_cast < /*comp-cat*/ > ( lhs. compare ( rhs ) <=> 0 ) .

計算量

ビューのサイズに対して線形。

注記

非推定コンテキストを用いた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 冗長な追加オーバーロードが依然として要求されていた オーバーロードセットが削減された