Могу ли я сделать это в C ++?
if (4<5<6)
cout<<"valid"<<endl;
то есть двойное сравнение? Поскольку я знаю, что могу
bool a;
a = 1+2<3+4<5>6;//etc
Да, вы можете сделать это, но это будет не то, что вы ожидаете. Это разбирается как
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.
Он компилируется, но не будет делать то, что вы ожидаете —
if( 4 < 5 < 2)
такой же как
if( (4 < 5) < 2)
такой же как
if( (1 < 2) ) //1 obtained from cast to boolean
что, конечно, правда, хотя я представляю, что вы ожидали чего-то совершенно другого.
Это может быть неуклюжим, но это будет работать:
int i, j, k;
i = 4; j = 5; k = 6;
if ( (i < j) && (j < k) )
{
cout << "Valid!" << endl;
}