三路比较

计算机科学中，三路比较（three-way comparison）取具有全序的属于同一类型的2个值A和B，在一个操作中确定A < B, A = B, 或 A > B。这是数学上的三分律概念。

 编程语言支持 
C语言的函数strcmp和memcmp在字符串之间、内存空间之间做三路比较。返回负值表示第一操作数在字典序上小于第二操作数；返回零表示2个操作数相等；返回正值表示第一操作数大于第二操作数。标准库的快排序函数qsort把三路比较扩展到任何类型，要求提供一个执行比较的函数指针。 

C++20引入了“航天飞船运算符”（spaceship operator）<=>做三路比较。Herb Sutter proposed adding a three-way comparison operator to the C++ standard with the <=> syntax, in a paper entitled "Consistent Comparison". See "Consistent Comparison"  It was successfully merged into the C++20 draft in November 2017.

Perl(限数值比较，如果是字符串字典序比较要用cmp运算符), PHP (从版本7), Ruby, Apache Groovy，都使用航天飞船运算符<=>返回−1、0、1分别表示大于、等于、小于。 Python 2.x cmp(被Python 3.x删除)、OCaml compare, 和Kotlin的compareTo函数做相应的事。Haskell标准库的三路比较函数compare可用于所有属于Ord类型类的类型，返回类型为Ordering, 其值是LT (小于), EQ (相等), GT (大于):

data Ordering = LT | EQ | GT 

许多面向对象编程语言的三路比较方法，在当前对象和其他给定对象之间三路比较。例如，Java语言中任何实现了Comparable接口的类都有compareTo 方法，返回非负整数、零、正整数，或抛出一个NullPointerException异常（如果一个或两个对象是null）。类似地，.NET Framework中，任何实现了IComparable接口的类都有CompareTo 方法。

从Java 1.5开始，也可以用Math.signum静态方法。 

航天飞船运算符
Perl, PHP, Ruby, Apache Groovy，C++20等语言都使用航天飞船运算符<=>。 

这个名字起源于在上的游戏的星战飞船。也有编程者建议按星球大战的钛战机命名。

PHP例子:
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

参见
 strcmp


参考文献

Category:运算符_(编程)
Category:C++