Двойное сравнение

Могу ли я сделать это в C ++?

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

то есть двойное сравнение? Поскольку я знаю, что могу

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

0

Решение

Да, вы можете сделать это, но это будет не то, что вы ожидаете. Это разбирается как

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.

9

Другие решения

Он компилируется, но не будет делать то, что вы ожидаете —

if( 4 < 5 < 2)

такой же как

if( (4 < 5) < 2)

такой же как

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

что, конечно, правда, хотя я представляю, что вы ожидали чего-то совершенно другого.

4

Это может быть неуклюжим, но это будет работать:

int i, j, k;
i = 4; j = 5; k = 6;
if ( (i < j) && (j < k) )
{
cout << "Valid!" << endl;
}
2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector