跳转到内容

2.2.7 关系表达式

比较表达式、关系表达式、相等表达式三者组成了 C++ 中的比较关系,它们的形式如下:

  • 比较表达式 <=> 移位表达式
  • 移位表达式
  • 关系表达式 < 比较表达式
  • 关系表达式 > 比较表达式
  • 关系表达式 <= 比较表达式
  • 关系表达式 >= 比较表达式
  • 比较表达式

其中,< 表示小于,> 表示大于,<= 表示小于等于,>= 表示大于等于。

  • 相等表达式 == 关系表达式
  • 相等表达式 != 关系表达式
  • 关系表达式

其中,== 表示等于,!= 表示不等于。注意,表示等于时,中间的运算符是两个等号 ==,而不是一个等号 =。

关系表达式与相等表达式的计算

Section titled “关系表达式与相等表达式的计算”

比较表达式和关系表达式的结果都是 bool 类型。例如:

42 < 24 // 值为 false
42 > 24 // 值为 true
42 <= 42 // 值为 true
24 >= 42 // 值为 false
42 == 42 // 值为 true
42 != 42 // 值为 false

如果两边的表达式的类型不同,C++ 会尝试将两边转换为类型大小较大的那个类型。例如:

'a' < 42 // 值为 false

这里,'a' 被转换为 int 类型,然后再进行比较。'a'的ASCII码是65,所以这个比较的结果是 65 < 42,得到 false。

注意,不要连用两个比较运算符,例如24 < a < 42。这样的表达式会导致计算 24 < a 的结果,得到一个 bool 值,然后这个值(假定为x)再计算 x < 42。这样的计算中,bool 被转换为 int 类型(因为比较的右边是 int 类型),结果x要么是0 要么是 1,然后和 42 比较,这显然不会得到我们想要的结果。

<=> 表示三路比较,<=> 的结果是一个整数,如果左边的值小于右边的值,结果是负数;如果左边的值等于右边的值,结果是0;如果左边的值大于右边的值,结果是正数。例如:

(42 <=> 24) > 0 // 值为 true
(42 <=> 42) == 0 // 值为 true
(24 <=> 42) < 0 // 值为 true