This page looks best with JavaScript enabled

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

 ·  ☕ 2 min  ·  ✍️ eiximenis

Nota: Este post ha sido importado de mi blog de geeks.ms. Es posible que algo no se vea del todo "correctamente". En cualquier caso puedes acceder a la versión original aquí

Post cortito… 😉

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

1
2
int x = 1;
iny 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).

Si quieres, puedes invitarme a un café xD

eiximenis
ESCRITO POR
eiximenis
Compulsive Developer