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