[C con Clase] La prioridad del operador ?:
Steven Davidson
srd4121 en njit.edu
Vie Mayo 28 19:05:31 CEST 2010
Hola Giancarlo,
José te ha contestado correctamente, pero quiero agregar a lo dicho.
Giancarlo wrote:
> Hola a todos
>
> Creía que el operador ?: tenía más prioridad que el de asignación =,
> pero en el siguiente ejemplo ocurren cosas raras:
>
> int a=1, b=2;
> a>b? b : a = 3;
> a>b? b : a = 5;
> cout << "a=" << a << ", b=" << b << endl;
>
> obtengo la siguiente salida:
> a=3, b=2 :-o
> que es errónea.
>
No es erróneo. Lo que está sucediendo es lo siguiente:
(a>b? b : a = 3);
(a>b? b : a = 5);
O si lo prefieres:
(a>b) ? (b) : (a = 3);
(a>b) ? (b) : (a = 5);
Ambas sentencias tienen solamente una expresión: condicional (?:).
En la primera sentencia, hacemos esto:
¿ 1 > 2 ? No => evaluar: a = 3
Por lo tanto, tenemos:
a = 3, y
b = 2
En la segunda sentencia, tenemos:
¿ 3 > 2 ? Sí => evaluar: b
Al final, obtenemos:
a = 3, y
b = 2
> Sin embargo si coloco paréntesis así:
> (a>b? b : a) = 3;
> (a>b? b : a) = 5;
>
> la salida es:
> a=3, b=5
> que es correcta.
>
Esto es correcto porque has cambiado las expresiones de ambas
sentencias, que ahora contienen dos expresiones en cada una: condicional
(?:) y asignación (=).
Espero haber agregado a la aclaración.
Steven
Más información sobre la lista de distribución Cconclase