c++ - simplificar - ¿El orden de las expresiones booleanas es importante en while loop?
simplificar expresiones booleanas online (2)
La diferencia es que en C ++, se sigue un atajo al evaluar las condiciones booleanas.
En el caso de un and
, usted sabe que si el primer enunciado es falso, el resultado completo es falso. En este caso, la segunda condición no se evaluará en absoluto. De manera similar, si la primera instrucción en una declaración or
evalúa como verdadera, entonces la segunda no se evalúa.
Entonces, ¿por qué es útil esto, excepto el pequeño esfuerzo ahorrado en la evaluación de la segunda declaración? Uno de los casos es AND
es en el que puede que no desee que se evalúe la segunda expresión si la primera es falsa. Una razón para esto es que la segunda expresión puede estar mal definida si la primera declaración es falsa.
Por ejemplo, al acceder a elementos vectoriales en un ciclo while, es posible que tenga una situación en la que esté verificando alguna condición. Además de eso, debes tener cuidado para asegurarte de que el índice esté dentro de los límites del vector. Entonces puedes escribir
while (i < vector.size() && condition(vector[i]))
Puede ver que si la primera parte es false
, el programa se bloqueará al acceder al vector[i]
en la condición. Sin embargo, no llega a ese punto. Este es solo uno de los muchos usos de los operadores de cortocircuito.
¿Cuál es la diferencia entre una expresión como:
int a, b;
bool p = false;
while (cin >> a >> b and not p) { // code }
// and:
int a, b;
bool p = false;
while (not p and cin >> a >> b) { // code }
Sí, el orden es importante debido a la evaluación del cortocircuito .
while (cin >> a >> b and not p)
tomará en la entrada y si esa operación tiene éxito entonces evaluará p
. Si la entrada falla, terminamos el ciclo y nunca marcamos p
. Por otra parte:
while (not p and cin >> a >> b)
Se evaluará p
y si not p
es false
entonces el resto de la condición no se ejecutará.