Namespaces
Variants

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

From cppreference.net
(注:このHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造を保持したまま出力します)
定義済みヘッダー <string_view>
(1)
template < class CharT, class Traits >

constexpr bool operator == ( std:: basic_string_view < CharT,Traits > lhs,

std:: basic_string_view < CharT,Traits > rhs ) noexcept ;
(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 に対応する文字と等しい場合に等しいと見なされます。

実装はこれらの関数に対して十分な追加の constexpr および noexcept オーバーロードを提供し、 basic_string_view<CharT,Traits> オブジェクト sv が、 basic_string_view<CharT,Traits> への暗黙的な変換を持つ別のオブジェクト t と比較できるようにする。そのセマンティクスは、 sv basic_string_view<CharT,Traits>(t) を比較する場合と同一である。

(C++20以前)

三方比較演算子( /*comp-cat*/ )の戻り値の型は、その修飾付きIDが型を表す場合は Traits :: comparison_category であり、それ以外の場合は std::weak_ordering である。 /*comp-cat*/ が比較カテゴリ型でない場合、プログラムは不適格である。

< <= > >= 、および != 演算子は、それぞれ 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 冗長な追加オーバーロードが依然として要求されていた オーバーロードセットが削減された