在 C++ 中,确定某个值 x 是否在两个限制之间的常用方法是:
//This is (A)
double x = 0.0d;
double lower = -1.0d;
double upper = +1.0d;
if(x > lower && x < upper){
// Do some stuff
}
但是今天我无意中发现我可以这样做:
// This is (B)
double x = 0.0d;
double lower = -1.0d;
double upper = +1.0d;
if(lower < x < upper){
// Do some stuff
}
它似乎工作正常,但我以前从未听说过这样做,“lower < x < upper”。这会产生您期望的可执行代码吗? IE,(A)是否等同于(B)?
我想很多人都不知道这一点,我怀疑这可能是因为编译器对 (A) 和 (B) 的解释不同。这样对吗?
最佳答案
不,A 和 B 不是等价的,你不能这样做。
或者,显然您可以(正如您发现的那样),但您并没有按照您认为的方式去做。
您正在评估 (lower < x) < upper
,即 lower < x
的值(这是 false
或 true
,但转换为 int
进行比较)与 upper
进行比较.
参见 this table of operator precedence获取更多信息。
关于c++ - C/C++ 中的等式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13918930/