C++判断值是否在区间:为何A < B < C失效而A < B && B < C可用
A < B < C写法失效的原因(C++) - C++的
<关系运算符为左结合规则,不会按照人类直觉的「B同时介于A和C之间」的逻辑解析,会从左到右分步执行运算:- 首先计算
A < B,得到布尔类型的结果:结果为真时对应整数值1,结果为假时对应整数值0 - 再将第一步得到的
1/0和C做比较,也就是实际执行的逻辑是(A < B) < C
- 首先计算
- 举个反例就能直观看到问题:假设A=2,B=5,C=3,你预期判断5是否在2和3之间,结果应为假。但按
A < B < C执行:- 先算
2 < 5,结果为真,对应数值1 - 再算
1 < 3,结果为真,最终if分支会被错误触发
- 先算
- 而
A < B && B < C的逻辑是完全符合预期的:&&逻辑与运算符要求左右两个判断条件同时为真,整体表达式结果才为真,刚好对应「B大于A且B小于C」的区间判断需求。
额外补充:部分语言(比如Python)支持链式比较的语法,
A < B < C会被自动解析为A < B and B < C,但C++没有对应语法设计,不要跨语言直接套用写法。
内容的提问来源于stack exchange,提问作者Pro_gram_mer
相关产品推荐
相关产品推荐

