2013-08-17 15 views
10

operator<がある場合、operator>=!(a < b)として実装できます。しかし、私がブリストルのC++委員会に行ったとき、あなたはすべてこのように比較演算子を実装できると言いました。特に、比較演算子が重要でない型を考える場合(特にUnicodeの場合は、任意の長い文字列を考慮してください)、operator<を1回呼び出すだけでこれを行うことができます。私はこれがどうやってできるのか想像できません。他の比較演算子を1回の呼び出しで実装する

operator>operator<=を実装するには、operator<を1回だけコールし、他の比較演算子を使用しないでください。

+0

私はabtを '' ''しかし '' std :: rel_ops''(http://en.cppreference.com/w/cpp/utility/rel_ops/operator_cmp)で '==' '<' –

+0

自分の例と同じです: 'a> b'は'!(a == b || a usr2564301

+0

これは、演算子==への1回の呼び出しも含みますが、それは明らかにカスタム演算子よりパフォーマンスが劣ります>。 – Puppy

答えて

16
  • a > b == b < a
  • a <= b == !(b < a)
  • a >= b == !(a < b)

それは(ここでは私のメタ構文を乱用の一種)未満の面で平等を実現することも可能です:

  • (a == b) == (!(a < b) && !(b < a))
  • (a != b) == (a < b || b < a)

それは2回の比較を必要とし、一般的に、直接、より効率的に実装することができますので、私は、実際にはそうすることをお勧めしませんが。

+0

私が見たのは:-)コメントを削除しました – xanatos

+2

SQLのようにスリーステートロジックを実装したい場合は、これは明らかに動作しません。 – xanatos

+1

+1最後の1つ...(!(a xanatos

関連する問題