operador - ¿Cómo maneja C++ &&?(Evaluación de cortocircuito)
operador and en c# (7)
C ++ usa la lógica de cortocircuito, por lo que si bool1
es falso, no necesitará verificar bool2
.
Esto es útil si bool2 es realmente una función que devuelve bool, o para usar un puntero:
if ( pointer && pointer->someMethod() )
sin lógica de cortocircuito, se bloqueará al desreferenciar un puntero NULL, pero con lógica de cortocircuito, funciona bien.
Esta pregunta ya tiene una respuesta aquí:
Cuando se encuentra con un (bool1 && bool2), ¿alguna vez c + + intenta verificar bool2 si bool1 fue encontrado falso o lo ignora de la forma en que PHP lo hace?
Lo siento si es una pregunta demasiado básica, pero realmente no pude encontrar una mención de eso ni en Schildt ni en Internet.
Eso es correcto (comportamiento corto-cicuit). Pero cuidado: el cortocircuito se detiene si el operador invocado no es el operador integrado, sino un operator&&
definido por el usuario operator&&
(lo mismo con el operator||
).
Esto se llama evaluación de cortocircuito (Wikipedia)
El operador && es un operador de cortocircuito en C ++ y no evaluará bool2 si bool1 es falso.
La evaluación de cortocircuito denota la semántica de algunos operadores booleanos en algunos lenguajes de programación en los que el segundo argumento solo se ejecuta o evalúa si el primer argumento no es suficiente para determinar el valor de la expresión: por ejemplo, cuando el primer argumento de la Y la función evalúa a falso, el valor total debe ser falso; y cuando el primer argumento de la función OR se evalúa como verdadero, el valor general debe ser verdadero.
En C ++, tanto && como || los operadores usan la evaluación de cortocircuito.
Lo que te refieres es una evaluación de cortocircuito . Pensé que podría ser específico del compilador, sin embargo, el artículo con el que lo vinculé lo muestra como un idioma específico, y C ++ se adhiere. Si de hecho es específico del compilador, no puedo imaginarme un compilador que no lo siga. El compilador del día a día que uso actualmente, VS 2008, sí. Básicamente seguirá la precedencia del operador, y tan pronto como se garantice el resultado de la condición,
Los cortocircuitos del operador &&
en C ++ - si bool1
era falso en tu ejemplo, bool2
no se verificaría / ejecutaría.
Sí, el operador &&
en C ++ utiliza la evaluación de cortocircuito de modo que si bool1
evalúa como false
, no molesta evaluar bool2
.
La "evaluación de cortocircuito" es el término elegante que desea buscar en Google y buscar en los índices.