2012-10-18 64 views
0

我可以在C++中执行此操作吗?双重比较

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

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

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

不,不这样做。但是用'g ++ Wall -g'编译(即所有的警告和调试信息),编译器会警告你。 –

回答

9

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

if ((4<5) < 6) 

这将产生

if (1 < 6) 

因为4<5计算为true被晋升为1,其收益率,显然,真实的。

你需要

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

而且,是的,你可以做

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

但也被分析为

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

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

+1

并且'4 <5'为真可以铸造成1,这确实是,但是偶然小于6. –

+0

啊,这是一个很好的答案。我没有这样想过。 – Joe

+0

也是'< ... >'对于解析器来说它是一个模板签名,所以你也会得到语法错误。 – Ken

2

这可能是笨拙的,但是这将工作:

int i, j, k; 
i = 4; j = 5; k = 6; 
if ((i < j) && (j < k)) 
{ 
    cout << "Valid!" << endl; 
} 
4

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

if(4 < 5 < 2) 

一样

if((4 < 5) < 2) 

一样

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

这当然是真实的,尽管我想你会期待一些完全不同的东西。