Sé que hay un montón de respuestas, y un acepté, pero todavía me pongo mi granito de arena para otro punto de vista.
Sé que esta pregunta fue de C#, pero supongo que por algo así como un operador de sufijo no tiene un comportamiento diferente de C:
int main(){
int x = 0;
while (x<1)
x = x++;
}
El conjunto (sí, he editado para que sea más legible) generado por el compilador muestra
...
mov -8(rbp), 0 ; x = 0
L1:
cmp -8(rbp), 1 ; if x >= 1,
jge L2 ; leave the loop
mov eax, -8(rbp) ; t1 = x
mov ecx, eax ; t2 = t1
add ecx, 1 ; t2 = t2 + 1
mov -8(rbp), ecx ; x = t2 (so x = x + 1 !)
mov -8(rbp), eax ; x = t1 (kidding, it's the original value again)
jmp L1
L2:
...
de manera equivalente, el bucle está haciendo algo como:
t = x
x = x + 1
x = t
Nota al margen: encender ninguna optimizaciones que da un resultado de montaje como éste:
...
L1:
jmp L1
...
que ni siquiera se molesta para almacenar el valor que le dijo que para dar x!
Wow - No creo que haya visto tantas respuestas incorrectas aquí ... –
Y la moraleja de la historia es evitar escribir eso en el código de producción :) –
Estoy totalmente de acuerdo contigo, Debería evitar escribir estos fragmentos de código en el código de producción como Jon dijo, muchas respuestas incorrectas, esto puede causar muchos problemas durante cualquier proyecto. – Ahmed