Таблица 4.2. Операции сравнения и логические операции
Символ операции |
Значение |
Использование |
! |
Логическое НЕ |
!expr |
< |
Меньше |
expr1 < expr2 |
<= |
Меньше или равно |
expr1 <= expr2 |
> |
Больше |
expr1 > expr2 |
>= |
Больше или равно |
expr1 >= expr2 |
== |
Равно |
expr1 == expr2 |
!= |
Не равно |
expr1 != expr2 |
&& |
Логическое И |
expr1 && expr2 |
|| |
Логическое ИЛИ |
expr1 || expr2 |
Примечание. Все операции в результате дают значение типа bool |
Операции сравнения и логические операции в результате дают значение типа bool, то есть true или false. Если же такое выражение встречается в контексте, требующем целого значения, true преобразуется в 1, а false – в 0. Вот фрагмент кода, подсчитывающего количество элементов вектора, меньших некоторого заданного значения:
vector<int>::iterator iter = ivec.beg-in() ;
while ( iter != ivec.end() ) {
// эквивалентно: e1em_cnt = e1em_cnt + (*iter < some_va1ue)
// значение true/false выражения *iter < some_va1ue
// превращается в 1 или 0
e1em_cnt += *iter < some_va1ue;
++iter;
}
Мы просто прибавляем результат операции “меньше” к счетчику. (Пара += обозначает составной оператор присваивания, который складывает операнд, стоящий слева, и операнд, стоящий справа. То же самое можно записать более компактно: elem_count = elem_count + n. Мы рассмотрим такие операторы в разделе 4.4.)
Логическое И (&&) возвращает истину только тогда, когда истинны оба операнда. Логическое ИЛИ (||) дает истину, если истинен хотя бы один из операндов. Гарантируется, что операнды вычисляются слева направо и вычисление заканчивается, как только результирующее значение становится известно. Что это значит? Пусть даны два выражения:
expr1 && expr2
expr1 || expr2
Если в первом из них expr1 равно false, значение всего выражения тоже будет равным false вне зависимости от значения expr2, которое даже не будет вычисляться. Во втором выражении expr2 не оценивается, если expr1 равно true, поскольку значение всего выражения равно true вне зависимости от expr2.