双重比较

Chi*_*hin 0 c++ comparison boolean comparison-operators

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

if (4<5<6)
 cout<<"valid"<<endl;
Run Code Online (Sandbox Code Playgroud)

即双重比较?因为我知道我可以

bool a;
a = 1+2<3+4<5>6;//etc
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 9

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

if ( (4<5) < 6 )
Run Code Online (Sandbox Code Playgroud)

产量

if ( 1 < 6 ) 
Run Code Online (Sandbox Code Playgroud)

因为4<5评估true哪个被提升为1,这显然是真实的.

你需要

if ( (4<5) && (5<6) )
Run Code Online (Sandbox Code Playgroud)

还有,是的,你可以做到

a = 1+2<3+4<5>6;
Run Code Online (Sandbox Code Playgroud)

但那也被解析为

a = ((1+2)<((3+4)<5))>6;
Run Code Online (Sandbox Code Playgroud)

将评估false(1+2)<((3+4)<5)生成一个布尔值,它总是小于6.