jueves, 2 de julio de 2009

El operador ++ postfijo y el sentido común…

Post cortito… ;-)

El otro día estaba revisando código y vi algo parecido a lo siguiente (C#):

int x = 1;
int y = x++;

Si os pregunto los valores de x e y al final de este código… ¿cual seria vuestra respuesta? No lo preguntéis a Visual Studio… pensadlo.


¿Ya lo teneis?


Exacto: x vale 2 (es de esperar puesto que su valor se incrementa con ++), mientras que por su parte y vale 1. Es decir, el valor de x se incrementa después de la asignación.


Quizá os parezca ilógico, pero está así especificado explícitamente en la especificación de C#:


The ++ and -- operators also support prefix notation, as described in Section 7.6.5. The result of x++ or x-- is the value of x before the operation, whereas the result of ++x or --x is the value of x after the operation. In either case, x itself has the same value after the operation.


Sacado de: http://msdn.microsoft.com/en-us/library/aa691363(VS.71).aspx


Ya veis con que cosillas nos divertimos, eh??? ;-)


Saludos


PD: De la misma manera (y por la misma razón) en el siguiente código:

int x =1;
x=x++;

x tiene el valor 1 al finalizar.


En C# este código es correcto (otra cosa es que sea útil), a diferencia de p.ej. C++ donde este código es incorrecto: compila pero su resultado no está definido por el estándard… en algunos compiladores x puede terminar valiendo 1 y en otros compiladores puede terminar valiendo 2 (el caso de VC++ 9 en debug).


pd: Crosspost desde mi blog en geeks.ms

No hay comentarios: