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評価するため、明らかにtrueが得られます。true1

あなたは必要になるでしょう

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

また、はい、あなたはすることができます

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

しかし、それも次のように解析されます

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

これは、常に6よりも小さいブール値を生成するfalseために評価されます。(1+2)<((3+4)<5)

于 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 に答える