¿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?
davy.ai
Según las reglas de precedencia,
<
,>
,<=
,>=
tienen mayor precedencia que!=, ==
. Sin embargo, en la instruccióncout << (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óna != b
es verdadera, la segunda condicióna <= 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
yb
. Si son iguales, la primera condicióna != b
será falsa y la segunda condicióna <= b
será verdadera, lo que resultará en la salida de1
. Sia
es mayor queb
, ambas condiciones serán verdaderas, lo que resultará en la salida de1
. Sib
es mayor quea
, solo la primera condición será verdadera, lo que resultará en la salida de0
.En resumen, ambas condiciones tienen la misma precedencia, pero se evaluarán de izquierda a derecha debido a la evaluación de cortocircuito.