为啥有的语言的比较函数设计为返回二值而有的是三值?

很明显三值比二值信息量大。如果只用在“不稳定”排序上,那么二值就足够了。如果有需求要处理小于、等于、大于三种情况,你是愿意先调用两次compare得到equals呢,还是愿意只调用一次compare呢?例如下面的代码,返回bool的函数多调用了一次比较。int operator-(other) { int d = this.a - other.a if (d != 0) return d return this.b - other.b}bool operator\u0026lt;(other) { if (this.a \u0026lt; other.a) return true if (other.a \u0026lt; this.a) return false return this.b \u0026lt; other.b}另外,比较函数不一定用在排序上,也许还有其他用处。在Java里面compare也能当equals用: @Override boolean equals(Object other) { return this.compareTo(other) == 0;} 这样就不会有compare和equals语义不一致的坑了。


    推荐阅读