C/C+中的等式+; 在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 } //这是(A) 双x=0.0d; 双下=-1.0d; 双上=+1.0d; 如果(x>下&&x

C/C+中的等式+; 在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 } //这是(A) 双x=0.0d; 双下=-1.0d; 双上=+1.0d; 如果(x>下&&x,c++,c,equality,C++,C,Equality,但今天我偶然发现我可以做到这一点: // This is (B) double x = 0.0d; double lower = -1.0d; double upper = +1.0d; if(lower < x < upper){ // Do some stuff } //这是(B) 双x=0.0d; 双下=-1.0d; 双上=+1.0d; if(下部

但今天我偶然发现我可以做到这一点:

  // This is (B)
double x = 0.0d;
double lower = -1.0d;
double upper = +1.0d;

if(lower < x < upper){
  // Do some stuff
}
//这是(B)
双x=0.0d;
双下=-1.0d;
双上=+1.0d;
if(下部
它似乎工作得很好,但我以前从未听说过使用“lower 我想很多人都不知道这一点,我怀疑这可能是因为编译器对(a)和(B)的解释不同。是吗?

不,A和B不相等,你不能这样做

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

您正在计算
(lower
,即
lower
的值(即
false
true
,但转换为
int
进行比较)与
upper
进行比较


有关更多信息,请参阅。

它们绝对不是等效的。您的表达式
lower
将首先计算
lower
为真或假,然后分别计算
true
false

好的,是的。在这两种情况下,
x
在值范围之间。 例如: 下限=4; 上限=9; x=7

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

它不好用。事实上,这是大错特错的,只是偶然发生的


lower
被解析为
(lower
(下
的类型为
bool
,其值为
true
false
,具体取决于
x
的值。将代码< Boo> <代码>值与Ung/<代码>进行比较,编译器将BoL转换为浮标,值为<代码> 1 > /> > <代码>真< /COD>和<代码> 0代码> > <代码> false <代码> .< /P>这是基本算术,但不是基本C或C++。code>4<7<9
是真的,因为
4<7
是真的,
true<9
也是
true
。但是
7<4<9
也是
true
。不,这是错误的。基本C++,但C++(代码)>代码/代码> <代码>不是“Athnistic”:他们很肯定它评估<代码>下标要么<代码> 1代码>要么<代码> 0代码>,而不是<代码>真< <代码>或<代码> false <代码> > @ eGRUNIN:C++中是<代码>真< <代码>或<代码> false <代码>它们可以隐式地转换为
1
0
@egrunin”操作符<(小于),>(大于),=(大于或等于)都会产生
false
true
”@K-ballo:看看
unwind
的答案中的正确措辞。啊!谢谢你,我想可能是这样的!