C / C ++中的平等

时间:2012-12-17 17:23:34

标签: c++ c equality

在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
}

它似乎工作得很好,但我从来没有听说过这种做法,“较低的&lt; x&lt; upper”。这是否会产生您所期望的可执行代码? IE,是(A)相当于(B)?

我想很多人都不会知道这一点,我怀疑这可能是因为编译器(A)对(B)的解释不同。这是对的吗?

4 个答案:

答案 0 :(得分:13)

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

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

您正在评估(lower < x) < upper,即lower < x的值(falsetrue,但转换为int进行比较)与upper进行比较。

有关详细信息,请参阅this table of operator precedence

答案 1 :(得分:3)

他们肯定不等同。您的表达式lower < x < upper将首先将lower < x评估为真或假,然后分别执行true < xfalse < x

答案 2 :(得分:1)

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

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

答案 3 :(得分:-3)

嗯,是的。在任何一种情况下,x都在值范围之间。 例如:     lower = 4;     upper = 9;     x = 7;

如果您这样做:7 > 4 && 7 < 9与说4 < 7 < 9相同。 顺便说一句,这是基本的算术。