2013-08-17 20 views
10

我已經看到了,如果您有operator<,則可以執行operator>=作爲!(a < b)。但是,當我去布裏斯托爾的C++委員會時,他們說你可以用這種方式實現所有的比較運算符。特別是,當考慮具有非平凡比較運算符的類型(考慮任意長的字符串,特別是如果這是Unicode)時,只需要對operator<進行一次調用即可完成。我無法想象如何做到這一點。按照運算符<在一次調用中實現其他比較運算符

我如何實現operator>operator<=只需一個電話到operator<,沒有其他比較操作?

+0

我不確定只是'<'但是['std :: rel_ops'](http://en.cppreference.com/w/cpp/utility/rel_ops/operator_cmp)可以用'=='和'<'' –

+0

和你自己的例子一樣:'a> b'等於'!(a == b || a usr2564301

+0

這也涉及到對operator ==的調用,這顯然比自定義運算符的性能要差一些。 – 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)

雖然我不建議在實踐中堅持下去,因爲它需要兩個比較,一般上更有效地實現。

+0

我曾看過:-)我刪除了評論 – xanatos

+2

如果想要實現三態邏輯,如SQL – xanatos

+1

+1而最後一個......(!(a xanatos