Бөлісу құралы:


Логический оператор AND: &&

Синтаксис

logical-and-expression:
equality-expression
logical-and-expression && equality-expression

Замечания

Логический оператор AND (&&) возвращается true , если оба операнда являются и возвращаются truefalse в противном случае. Операнды неявно преобразуются в тип bool перед оценкой, а результат — тип bool. Логический И имеет слева направо ассоциативность.

Операнды для логического оператора AND не должны иметь один и тот же тип, но они должны иметь логический, целочисленный или указательный тип. Операнды обычно реляционные или равные выражения.

Первый операнд полностью вычисляется, и все побочные эффекты завершаются до того, как оценка логического выражения AND продолжается.

Второй операнд оценивается только в том случае, если первый операнда оценивается true (ненулево). Эта оценка устраняет отсутствие необходимости в оценке второго операнда при использовании falseлогического выражения AND. Эту оценку короткого канала можно использовать для предотвращения деконференции указателя NULL, как показано в следующем примере:

char *pch = 0;
// ...
(pch) && (*pch = 'a');

Если pch значение равно null (0), справа от выражения никогда не вычисляется. Это кратковременное вычисление делает назначение с помощью указателя NULL невозможным.

Ключевое слово оператора для &&

C++ указывает and в качестве альтернативной орфографии для &&. В C альтернативная орфография предоставляется в виде макроса в заголовке <iso646.h> . В C++альтернативная орфография является ключевым словом; <использование iso646.h> или эквивалента <ciso646> C++ устарело. В Microsoft C++ /permissive- параметр или /Za компилятор требуется для включения альтернативной орфографии.

Пример

// expre_Logical_AND_Operator.cpp
// compile with: /EHsc
// Demonstrate logical AND
#include <iostream>

using namespace std;

int main() {
   int a = 5, b = 10, c = 15;
   cout  << boolalpha
         << "The true expression "
         << "a < b && b < c yields "
         << (a < b && b < c) << endl
         << "The false expression "
         << "a > b && b < c yields "
         << (a > b && b < c) << endl;
}

См. также

Встроенные операторы C++, приоритет и ассоциативность
Логические операторы C