web-dev-qa-db-ja.com

C ++でspaceship <=>演算子が必要なのはなぜですか?

C++でこのような演算子が必要な理由と、それが最新のC++プログラミングでどのように役立つのでしょうか。これを適用できる現実世界のコード例が役立ちます。

この質問は、ハーブサッターからの詳細な提案を読まずに、現実世界での実際のアプリケーションを理解することを目的としています。しかし、提案に不快感はありません。

16
Ram

頭の上の3か所にモチベーションをあげます。

  1. これは、他のすべての比較演算子(完全に順序付けられたドメインの場合)の一般的な一般化です:>>===<=<<=>(スペースシップ)を使用すると、これらの他の各操作を完全に一般的な方法で実装できます。
  2. これは文字列に非常に役立ちます。その特定のケースでは、C標準ライブラリの古き良きstrcmp()です。そのため、ベクトルやリストのデータ、その他の順序付けされたコンテナなど、辞書式順序のあるものすべてに役立ちます。
  3. 整数の場合、それはハードウェアがとにかく行うことです:x86またはx86_64でaとb(CMP RAX, RBX)を比較することは、RAXが実際に変更されず、フラグのみが影響されるという点を除いて、基本的に減算(SUB RAX, RBX)と同じです。 「等しい/等しくない/より大きい/より小さい/などにジャンプ」を使用できます。 (JE/JNE/JGT/JLTなど)次の命令として。 CMPは「宇宙船の比較」と考える必要があります。
13
einpoklum