[C con Clase] La prioridad del operador ?:

Giancarlo gcdotta en gmail.com
Vie Mayo 28 19:05:45 CEST 2010


Sigo sin tenerlo claro, Jose:
 
> a>b? b : a = 3;
> [JBG] despues de esta instruccion ya te cambio el valor de "a" y ahora vale 3
[G] Pero ¿porqué cambió el valor de a? ¿Porque el resultado de "?:" es "a" y luego se efectúa la asignación o porque se efectuó primero la asignación y se desechó el resultado de "?:" ? Estas preguntas vienen a cuento porque en la instrucción siguiente:
> a>b? b : a = 5;
> [JBG] y aqui a efectivamente mayor que "b" y devuelve "b" que no ha sido cambiada como le paso a "a"
[G] Si antes "a" se cambió porque el resultado de "?=" fue "a", ahora, que el resultado del "?:" es "b", el 5 debería meterse en "b", pero no es así como lo muestra la salida.
Por otro lado, si antes "a" se cambió porque se efectuó la asignación antes que el "?:", ahora debería ocurrir igual y "b" pasar a valer 5, cosa que ya hemos visto que no ocurre.

O sea que sigo sin entenderlo, porque tanto si considero que la precedencia es de la asignación frente al "?:" o al revés, no me sale el resultado que se obtiene.

Por cierto estoy usando Visual c++ 2008, por si fuera un caso particular del compilador, cuya ayuda dice para el operador ":?" :
The type of the result is an l-value if both the second and third operands are of the same type and both are l-values.
Y también dice que el operador "?=" tiene precedencia sobre el "=".
Además, al compilar, no genera warnings para estas expresiones.

Gracias Jose. ¿alguna otra idea?


Más información sobre la lista de distribución Cconclase