2.2.7 关系表达式
比较表达式、关系表达式、相等表达式三者组成了 C++ 中的比较关系,它们的形式如下:
比较表达式 <=> 移位表达式移位表达式
关系表达式 < 比较表达式关系表达式 > 比较表达式关系表达式 <= 比较表达式关系表达式 >= 比较表达式比较表达式
其中,< 表示小于,> 表示大于,<= 表示小于等于,>= 表示大于等于。
相等表达式 == 关系表达式相等表达式 != 关系表达式关系表达式
其中,== 表示等于,!= 表示不等于。注意,表示等于时,中间的运算符是两个等号 ==,而不是一个等号 =。
关系表达式与相等表达式的计算
Section titled “关系表达式与相等表达式的计算”比较表达式和关系表达式的结果都是 bool 类型。例如:
42 < 24 // 值为 false42 > 24 // 值为 true42 <= 42 // 值为 true24 >= 42 // 值为 false42 == 42 // 值为 true42 != 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 比较,这显然不会得到我们想要的结果。
比较表达式的计算
Section titled “比较表达式的计算”<=> 表示三路比较,<=> 的结果是一个整数,如果左边的值小于右边的值,结果是负数;如果左边的值等于右边的值,结果是0;如果左边的值大于右边的值,结果是正数。例如:
(42 <=> 24) > 0 // 值为 true(42 <=> 42) == 0 // 值为 true(24 <=> 42) < 0 // 值为 true