Operador AND lógico: &&

Sintaxis

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

Comentarios

El operador AND lógico (&&) devuelve true si los dos operandos son true; de lo contrario, devuelve false. Los operandos se convierten implícitamente al tipo bool antes de la evaluación y el resultado es de tipo bool. El operador AND lógico tiene asociatividad de izquierda a derecha.

Los operandos del operador lógico AND no necesitan tener el mismo tipo, pero deben ser de tipo booleano, entero o de puntero. Los operandos son normalmente expresiones relacionales o de igualdad.

El primer operando se evalúa en su totalidad y, antes de proseguir con la evaluación de la expresión AND lógica, se aplican todos los efectos secundarios.

El segundo operando se evalúa solo si el primero se evalúa como true (distinto de cero). Esta evaluación elimina la evaluación innecesaria del segundo operando cuando la expresión lógica AND es false. Puede utilizar esta evaluación de cortocircuito para evitar la desreferencia de punteros null, como se muestra en el ejemplo siguiente:

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

Si pch es null (0), el lado derecho de la expresión no se evalúa. Esta evaluación de cortocircuito hace imposible la asignación a través de un puntero nulo.

Palabra clave del operador para &&

C++ especifica and como una ortografía alternativa para &&. En C, la ortografía alternativa se proporciona como una macro en el encabezado <iso646.h>. En C++, la ortografía alternativa es una palabra clave; el uso de <iso646.h> o el equivalente de C++ <ciso646> está en desuso. En Microsoft C++, se requiere la opción del compilador /permissive- o /Za para poder habilitar la ortografía alternativa.

Ejemplo

// 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;
}

Consulte también

Operadores integrados de C++, precedencia y asociatividad
Operadores lógicos de C