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

Синтаксис

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

Замечания

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

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

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

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

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

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

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

C++ указывает and в качестве альтернативной орфографии для &&. В C альтернативная орфография предоставляется в виде макроса в заголовке <iso646.h> . В C++альтернативная орфография является ключевое слово; <использование iso646.h> или эквивалентное <C++ ciso646> не рекомендуется. В 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