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以降) |
2つのビューを比較します。
すべての比較は
compare()
メンバ関数(これは自身が
Traits::compare()
で定義されています)を通じて行われます:
- 2つのビューは、 lhs と rhs のサイズが等しく、かつ lhs の各文字が同じ位置の rhs に対応する文字と等しい場合に等しいと見なされます。
- 順序比較は辞書式順序で行われます – 比較は std::lexicographical_compare と同等の関数によって実行されます。
|
実装はこれらの関数に対して十分な追加の
|
(C++20以前) |
|
三方比較演算子( /*comp-cat*/ )の戻り値の型は、その修飾付きIDが型を表す場合は Traits :: comparison_category であり、それ以外の場合は std::weak_ordering である。 /*comp-cat*/ が比較カテゴリ型でない場合、プログラムは不適格である。
|
(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 | 冗長な追加オーバーロードが依然として要求されていた | オーバーロードセットが削減された |