[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