Originariamente inviato da MItaly
In un caso usi i reference, nell'altro i puntatori.

Il codice eseguibile generato probabilmente sarà identico, dato che i reference risultano essere dei puntatori nascosti.
Sono esattamente la stessa cosa. Compilando con VS 10 senza ottimizzazioni sia la chiamata:
codice:
012E2F7C lea eax,[b]
012E2F7F push eax
012E2F80 lea ecx,[a]
012E2F83 push ecx
012E2F84 call ref (12E11DBh)
012E2F89 add esp,8
sia la funzione di swap stessa (qua si vede la versione per riferimento senza prologo):
codice:
28: int t = a;
012E34CE mov eax,dword ptr [a]
012E34D1 mov ecx,dword ptr [eax]
012E34D3 mov dword ptr [t],ecx
29: a = b;
012E34D6 mov eax,dword ptr [a]
012E34D9 mov ecx,dword ptr [b]
012E34DC mov edx,dword ptr [ecx]
012E34DE mov dword ptr [eax],edx
30: b = t;
012E34E0 mov eax,dword ptr [b]
012E34E3 mov ecx,dword ptr [t]
012E34E6 mov dword ptr [eax],ecx
consistono esattamente nelle stesse istruzioni.
Suppongo che su linux, oltre a rimanere sempre praticamente uguali, sia persino più chiaro il codice, ma per il momento ho Windows sottomano