es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se maneja la precedencia del operador relacional en C++?

Según las reglas de precedencia, los operadores <, >, <=, >= tienen precedencia sobre !=, ==. Estoy tan confundido de cómo se ejecutará la siguiente declaración:

int a = 3, b = 3;
cout << (a != b || a <= b);

Sé sobre la evaluación de circuito corto y, según las reglas de precedencia, supongo que el compilador ejecutará primero a <= b ya que tiene precedencia sobre !=, pero no lo está haciendo.

Hice un pequeño experimento con la declaración anterior cambiando a <= b-- y cambiando el orden de las condiciones anteriores, y parece que <= y != tienen la misma precedencia, ya que el compilador ejecuta el que ocurra primero. ¿O me estoy perdiendo algo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Según las reglas de precedencia, <, >, <=, >= tienen mayor precedencia que !=, ==. Sin embargo, en la instrucción cout << (a != b || a <= b);, ambas condiciones se evaluarán de izquierda a derecha debido a la evaluación de cortocircuito. Esto significa que si la primera condición a != b es verdadera, la segunda condición a <= b no se evaluará. Por el contrario, si la primera condición es falsa, se evaluará la segunda condición.

    Por lo tanto, la salida de la instrucción dependerá de los valores de a y b. Si son iguales, la primera condición a != b será falsa y la segunda condición a <= b será verdadera, lo que resultará en la salida de 1. Si a es mayor que b, ambas condiciones serán verdaderas, lo que resultará en la salida de 1. Si b es mayor que a, solo la primera condición será verdadera, lo que resultará en la salida de 0.

    En resumen, ambas condiciones tienen la misma precedencia, pero se evaluarán de izquierda a derecha debido a la evaluación de cortocircuito.

Comments are closed.