Logical operators
Devuelve el resultado de una operación booleana.
| Nombre del operador | Sintaxis | Sobrecargable | Ejemplos de prototipo (para class T ) | |
|---|---|---|---|---|
| Dentro de la definición de clase | Fuera de la definición de clase | |||
| negación |
not a
! a |
Sí | bool T :: operator ! ( ) const ; | bool operator ! ( const T & a ) ; |
| AND |
a and b
a && b |
Sí | bool T :: operator && ( const T2 & b ) const ; | bool operator && ( const T & a, const T2 & b ) ; |
| OR inclusivo |
a or b
a || b |
Sí | bool T :: operator || ( const T2 & b ) const ; | bool operator || ( const T & a, const T2 & b ) ; |
|
||||
Contenidos |
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
conversión contextual a bool
: solo está bien formado si la declaración
bool t(arg)
está bien formada, para algún
t
temporal inventado.
El resultado es un bool prvalue.
Para el operador lógico NOT incorporado, el resultado es true si el operando es false . De lo contrario, el resultado es false .
Para el operador lógico AND incorporado, el resultado es true si ambos operandos son true . De lo contrario, el resultado es false . Este operador es de evaluación de cortocircuito : si el primer operando es false , el segundo operando no se evalúa.
Para el operador lógico OR incorporado, el resultado es true si el primer operando o el segundo operando (o ambos) es true . Este operador tiene evaluación de cortocircuito: si el primer operando es true , el segundo operando no se evalúa.
Tenga en cuenta que los operadores lógicos bit a bit no realizan evaluación de cortocircuito.
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 frente a operadores definidos por el usuario , las siguientes firmas de función integradas participan en la resolución de sobrecarga:
|
bool
operator
!
(
bool
)
|
||
|
bool
operator
&&
(
bool
,
bool
)
|
||
|
bool
operator
||
(
bool
,
bool
)
|
||
Ejemplo
#include <iostream> #include <sstream> #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 de "p &&" || !p && n != 2) // || tiene menor precedencia que && std::cout << "true\n"; // los flujos también son convertibles a bool std::stringstream cin; cin << "3...\n" << "2...\n" << "1...\n" << "quit"; std::cout << "Enter 'quit' to quit.\n"; for (std::string line; std::cout << "> " && std::getline(cin, line) && line != "quit";) std::cout << line << '\n'; }
Salida:
true Enter 'quit' to quit. > 3... > 2... > 1... >
Biblioteca estándar
Debido a que las propiedades de cortocircuito de
operator&&
y
operator||
no se aplican a las sobrecargas, y debido a que los tipos con semántica booleana son poco comunes, solo dos clases de la biblioteca estándar sobrecargan estos operadores:
|
aplica un operador aritmético unario a cada elemento del valarray
(función miembro pública de
std::valarray<T>
)
|
|
|
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>
)
|
Véase también
|
objeto función que implementa
x
&&
y
(plantilla de clase) |
|
|
objeto función que implementa
x
||
y
(plantilla de clase) |
|
|
objeto función que implementa
!
x
(plantilla de clase) |
| Operadores comunes | ||||||
|---|---|---|---|---|---|---|
| asignación |
incremento
decremento |
aritméticos | lógicos | comparación |
acceso a
miembros |
otros |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
...
]
|
llamada a función
a ( ... ) |
|
coma
a, b |
||||||
|
condicional
a ? b : c |
||||||
| Operadores especiales | ||||||
|
static_cast
convierte un tipo a otro tipo relacionado
|
||||||
|
Documentación de C
para
Operadores lógicos
|