とてもシンプルです。
ポイントを表す構造体を定義しました。そのような構造体が 2 つあると仮定すると、問題のコードはそれらの比較演算子を定義するため、次のようなものを記述できます。
if (pt1 < pt2) { ...
<
コンパイラは記号をどのように扱うことができますか? C++ では、次のことを行っています。式pt1 < pt2
は として解釈されpt1.operator < (pt2)
ます。つまり、 objectという特別な名前のメソッドが呼び出され、引数は に等しくなります。operator <
pt1
pt2
それが何をしているのか見てみましょう。const Point &p
引数の は、比較されるもう一方のオペランドを示します。const
オペランドを変更しないことを示し (これにより、コンパイラはより効果的なコードを生成できます)、渡されたものをコピーするのではなく、実際のインスタンス&
を操作することを意味します (これも、コピーが行われないため、より高速です)。比較)。struct
Point
ここで、式は、左側のオペランドの値 (オブジェクト、つまり、メソッドが実行されているコンテキスト内のオブジェクト)*が右側のオペランドの値と比較されているx<p.x
かどうかをチェックします。次に、コードは左辺が右辺と等しい場合をチェックするため、が比較されます。x
this
x
x
y
*言語純粋主義者向け: 言葉遣いは正確ではありませんが、初心者向けの説明では問題ありません。