如果 a 为 int 类型的变量,则表达式 (a >= 5 && a <= 10) 与 (5 <= a <= 10) 的值总是相同的。
答案选B。别被Python的链式写法带偏,C++里关系运算符不支持连写,要先算左边结果再和右边比,中间还会发生隐式类型转换,这才是坑。
最容易错就是以为5<=a<=10在C++里能像Python那样直接判断范围。其实C++严格遵循运算符优先级和结合性,两个<=优先级相同且左结合,会先算5<=a得到一个布尔值,再把那个布尔值去和10比。因为bool转int时true变1,所以只要5<=a成立,1<=10恒为真;若5<=a不成立,0<=10也恒为真。结果这个表达式永远为真,完全不等价于原题。
【考点】C++语言语法|运算符优先级|逻辑与表达式
本题考查C++二级"运算符优先级"考点,命题人专门卡住"以为C++支持链式比较"的初学者,因为5<=a<=10在C++里根本不是语法糖,而是先算5<=a再跟10比。