In effetti, sarà il caldo e la cpu è andata ... :-) ... ma bisogna fare chiarezza ...
In C++ (che penso sia quello a cui molti fanno riferimento), in effetti avviene che
a=a++;
mov eax,dword ptr [a]
mov dword ptr [a],eax
mov ecx,dword ptr [a]
add ecx,1
mov dword ptr [a],ecx
è equivalente a
a=a; (prime due istruzioni)
a++; (ultime tre istruazioni)
mentre nel caso
a=++a;
mov eax,dword ptr [a]
add eax,1
mov dword ptr [a],eax
mov ecx,dword ptr [a]
mov dword ptr [a],ecx
è equivalente a
a++; (ultime tre istruazioni)
a=a; (prime due istruzioni)
In definitiva, in tutti e due i casi avremo che la variabile aumenta di valore
Ma in C# (e suppongo anche in Java, anche se non ho controllato) avviene che
a=a++;
IL_0003: ldloc.0
IL_0004: dup
IL_0005: ldc.i4.1
IL_0006: add
IL_0007: stloc.0
IL_0008: stloc.0
è semplicemente equivalente a
a=a;
e invece
a=++a;
IL_0003: ldloc.0
IL_0004: ldc.i4.1
IL_0005: add
IL_0006: dup
IL_0007: stloc.0
IL_0008: stloc.0
equivale ad
a++;
Ultima modifica effettuata da nessuno il 01/07/2012 alle 17:33
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |