C++ 演算子について学ぼうとしていたときに、 cppreference.com で奇妙な比較演算子を見つけました。* このような表では、
「そうですね、もしこれらがC++で一般的な演算子であるならば、私はそれらをより良く学ぶ」と私は思いました。しかし、この謎を解明しようとする私のすべての試みは失敗しました。ここでも、スタックオーバーフローで私は私の検索で運がありませんでした。
そしてもしあれば、この演算子は正確に何をしますか?
*それまでの間にcppreference.comはそのページを更新し、<=>
operatorに関する情報を含んでいます。
これは 三元比較 演算子と呼ばれます。
P0515 紙の提案によると:
新しい3者間比較演算子
<=>
があります。式a <=> b
は、<0
の場合はa < b
を比較し、>0
の場合はa > b
を比較し、a
とb
が等しいか同等の場合は==0
を比較するオブジェクトを返します。あなたの型のすべての比較を書くには、適切なカテゴリ型を返す
operator<=>
を書くだけです:
あなたの型が自然に
<
をサポートし、そして<
、>
、<=
、>=
、==
、そして!=
を効率的に生成するならば、 _ordering を返してください。そうでなければ _equality を返し、 == および != を効率的に生成します。あなたの型のために
a == b
がf(a) == f(b)
を意味する場合はstrongを返し(代入可能性、fはnonprivate constインタフェースを使ってアクセス可能な比較優位状態のみを読む)、そうでなければweakを返します。
cppreference と言う:
三元比較演算子式は次の形式を取ります。
lhs <=> rhs (1)
式は次のようなオブジェクトを返します。
<0
の場合はlhs < rhs
を比較します>0
の場合はlhs > rhs
を比較します- そして
lhs
とrhs
が等しいか等しい場合は==0
を比較します。
参照されているWebページが変更されたため、この回答は無関係になりました
参照している Webページ が壊れています。その日はたくさん編集されていて、さまざまな部分が同期していませんでした。私が見ていたときの状況は次のとおりです。
ページ上部には、現在存在する比較演算子が一覧表示されています(C++ 14)。 <=>
thereがありません。
ページの下部に、彼らは同じ演算子をリストするべきでした、しかし、彼らはこっそりして、この将来の提案を加えました。
gcc
は<=>
yetについて(そして-std=c++14
と一緒に、決してそうすることはありません)知らないので、あなたはa <= > b
を意味したと思います。これはエラーメッセージを説明したものです。
今から5年後に同じことを試すと、おそらくより良いエラーメッセージが表示されます。<=> not part of C++14.
のようなものです。