Operadores lógicos
Devuelven el valor de una operación booleana.
Nombre operador | Sintaxis | Sobrecargable | Ejemplos de prototipos (para class T) | |
---|---|---|---|---|
Definición dentro de clase | Definición fuera de clase | |||
negación | not a
|
Sí | bool T::operator!() const; | bool operator!(const T &a); |
AND | a and b
|
Sí | bool T::operator&&(const T2 &b) const; | bool operator&&(const T &a, const T2 &b); |
OR | a or b
|
Sí | bool T::operator||(const T2 &b) const; | bool operator||(const T &a, const T2 &b); |
|
Contenido |
[editar] Explicación
Las expresiones de operadores lógicos tienen la forma
! rhs
|
(1) | ||||||||
lhs && rhs
|
(2) | ||||||||
lhs || rhs
|
(3) | ||||||||
Si el operando no es bool, se convierte a bool usando la conversión contextual a bool: solo está bien formado si la declaración bool t(arg)
está bien formada, para algunos creados temporalmente t
.
El resultado es un bool prvalue.
Para el operador NOT lógico integrado, el resultado es true si el operando es false. En otro caso, el resultado es false.
Para el operador AND lógico integrado, el resultado es true si ambos operandos son true. En otro caso, el resultado es false. Este operado es cortocircuitado: si el primer operando es false, no se evalúa el segundo operando.
Para el operador OR lógico integrado, el resultado es true si el primer o el segundo operando (o ambos) es true. Este operador es cortocircuitado: si el primer operando es true, no se evalúa el segundo operando.
Tenga en cuenta que sobre los operadores lógicos sobre bits no se realiza cortocircuito.
[editar] Resultados
a | true | false |
---|---|---|
!a | false | true |
and | a | ||
---|---|---|---|
true | false | ||
b | true | true | false |
false | false | false |
or | a | ||
---|---|---|---|
true | false | ||
b | true | true | true |
false | true | false |
En la resolución de sobrecarga de operadores definidos por usuario, los siguientes modelos integrados de función participan en la resolución de sobrecarga:
bool operator!(bool) |
||
bool operator&&(bool, bool) |
||
bool operator||(bool, bool) |
||
[editar] Ejemplo
#include <iostream> #include <string> int main() { int n = 2; int* p = &n; // los punteros son convertibles a bool if( p && *p == 2 // "*p" es seguro de usar después "p &&" || !p && n != 2 ) // || tiene menos precedencia que && std::cout << "verdadero\n"; // los streams también son convertibles a bool std::cout << "Introduzca 'salir' para terminar.\n"; for(std::string line; std::cout << "> " && std::getline(std::cin, line) && line != "salir"; ) ; }
Salida:
verdadero Introduzca 'salir' para terminar. > test > salir
[editar] Biblioteca estándar
Debido a que las propiedades de cortocircuito de operator&&
y operator||
se aplican a las sobrecargas, y los tipos con semántica booleana no son comunes, solamente dos clases de la biblioteca estándar sobrecargan estos operadores:
aplica el operador aritmético unario a cada elemento del valarray (función miembro pública de std::valarray )
| |
aplica operadores binarios a cada elemento de dos valarrays, o un valarray y un valor (plantilla de función) | |
Verifica si ha ocurrido un error (sinónimo de fail()). (función miembro pública de std::basic_ios<CharT,Traits> )
|
[editar] Ver también
Operadores comunes | ||||||
---|---|---|---|---|---|---|
Asignación | Incremento/decremento | Aritméticos | Lógicos | Comparación | Acceso a miembro | Otros |
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
Operadores especiales | ||||||
static_cast Convierte de un tipo a otro tipo relacionado |
Documentación de C para Operadores lógicos
|