0

我可以在 C++ 中做到这一点吗?

if (4<5<6)
 cout<<"valid"<<endl;

即双重比较?既然我知道我可以

bool a;
a = 1+2<3+4<5>6;//etc
4

3 回答 3

9

是的,你可以做到,但这不会是你所期望的。它被解析为

if ( (4<5) < 6 )

产生

if ( 1 < 6 ) 

因为4<5评估 to truewhich 被提升为1,这显然是正确的。

你需要

if ( (4<5) && (5<6) )

另外,是的,你可以做

a = 1+2<3+4<5>6;

但这也被解析为

a = ((1+2)<((3+4)<5))>6;

这将评估为falsesince(1+2)<((3+4)<5)产生一个布尔值,它总是小于 6。

于 2012-10-18T18:53:27.407 回答
4

它编译但不会做你期望的 -

if( 4 < 5 < 2) 

如同

if( (4 < 5) < 2)

如同

if( (1 < 2) )  //1 obtained from cast to boolean

这当然是真的,即使我想你期待的是完全不同的东西。

于 2012-10-18T18:54:43.673 回答
2

这可能很笨拙,但这会起作用:

int i, j, k;
i = 4; j = 5; k = 6;
if ( (i < j) && (j < k) )
{
    cout << "Valid!" << endl;
}
于 2012-10-18T18:54:42.500 回答