2

在 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) 不同。这对吗?

4

4 回答 4

13

不,A 和 B等价,你不能这样做。

或者,显然你可以(正如你所发现的那样),但你没有做你认为你正在做的事情。

您正在评估(lower < x) < upper,即lower < x(它是falsetrue,但转换为int用于比较)的值与upper.

有关详细信息,请参阅此运算符优先级表。

于 2012-12-17T17:25:07.070 回答
3

它们绝对不是等价的。您的表达式lower < x < upper将首先评估lower < x为真或假,然后分别执行true < xfalse < x

于 2012-12-17T17:25:45.697 回答
1

它不能正常工作。事实上,它是完全错误的,只是偶然的。

lower < x < upper被解析为(lower < x) < upper; (lower < x)具有类型bool,其值为truefalse,具体取决于 的值x。为了将该boolupper与编译器进行比较,编译器会将 bool 转换为具有1.0fortrue0.0for值的浮点数false

于 2012-12-17T17:27:20.587 回答
-3

嗯,是。无论哪种情况x都是介于值域之间。例如:较低 = 4;上 = 9; x = 7;

If you do:7 > 4 && 7 < 9与说 相同4 < 7 < 9。顺便说一下,这是基本的算术。

于 2012-12-17T17:27:10.287 回答