web-dev-qa-db-ja.com

C++の<=>演算子は何ですか?

C++ 演算子について学ぼうとしていたときに、 cppreference.com で奇妙な比較演算子を見つけました。* このような表では、

enter image description here

「そうですね、もしこれらがC++で一般的な演算子であるならば、私はそれらをより良く学ぶ」と私は思いました。しかし、この謎を解明しようとする私のすべての試みは失敗しました。ここでも、スタックオーバーフローで私は私の検索で運がありませんでした。

<=> C++ の間に関連はありますか?

そしてもしあれば、この演算子は正確に何をしますか?

*それまでの間にcppreference.comはそのページを更新し、<=>operatorに関する情報を含んでいます。

190
q-l-p

これは 三元比較 演算子と呼ばれます。

P0515 紙の提案によると:

新しい3者間比較演算子<=>があります。式a <=> bは、<0の場合はa < bを比較し、>0の場合はa > bを比較し、abが等しいか同等の場合は==0を比較するオブジェクトを返します。

あなたの型のすべての比較を書くには、適切なカテゴリ型を返すoperator<=>を書くだけです:

  • あなたの型が自然に<をサポートし、そして<><=>===、そして!=を効率的に生成するならば、 _ordering を返してください。そうでなければ _equality を返し、 == および != を効率的に生成します。

  • あなたの型のためにa == bf(a) == f(b)を意味する場合はstrongを返し(代入可能性、fはnonprivate constインタフェースを使ってアクセス可能な比較優位状態のみを読む)、そうでなければweakを返します。

cppreference と言う:

三元比較演算子式は次の形式を取ります。

lhs <=> rhs   (1)  

式は次のようなオブジェクトを返します。

  • <0の場合はlhs < rhsを比較します
  • >0の場合はlhs > rhsを比較します
  • そしてlhsrhsが等しいか等しい場合は==0を比較します。
166
msc

参照されているWebページが変更されたため、この回答は無関係になりました

参照している Webページ が壊れています。その日はたくさん編集されていて、さまざまな部分が同期していませんでした。私が見ていたときの状況は次のとおりです。

ページ上部には、現在存在する比較演算子が一覧表示されています(C++ 14)。 <=>thereがありません。

ページの下部に、彼らは同じ演算子をリストするべきでした、しかし、彼らはこっそりして、この将来の提案を加えました。

gcc<=>yetについて(そして-std=c++14と一緒に、決してそうすることはありません)知らないので、あなたはa <= > bを意味したと思います。これはエラーメッセージを説明したものです。

今から5年後に同じことを試すと、おそらくより良いエラーメッセージが表示されます。<=> not part of C++14.のようなものです。

11
Stig Hemmer