Funzionerà? Sì.
Dovresti usarlo? No.
Questo tipo di micro-ottimizzazione avrebbe senso se:
-
hai guardato il codice che il compilatore genera per il modo diretto di farlo (assegnazione e temporanea) e ha deciso che l'approccio XOR genera codice più veloce
-
hai profilato la tua app e hai scoperto che il costo dell'approccio diretto supera la chiarezza del codice (e il conseguente risparmio in termini di manutenibilità)
Al primo punto, a meno che tu non abbia fatto questa misurazione, dovresti fidarti del compilatore. Quando la semantica di ciò che stai cercando di fare è chiara, ci sono molti trucchi che il compilatore può fare, incluso riorganizzare l'accesso alle variabili in modo che lo swap non sia affatto necessario, o in-lining qualsiasi istruzione a livello macchina fornisca il più veloce scambia per un determinato tipo di dati. I "trucchi" come lo scambio XOR rendono più difficile per il compilatore vedere cosa si sta tentando di fare, e quindi rendere meno in grado di applicare tali ottimizzazioni.
Al secondo punto, cosa stai guadagnando per la complessità aggiunta? Anche se hai misurato e trovato l'approccio XOR più veloce, questo ha un impatto sufficiente a giustificare un approccio meno chiaro? Come lo sai?
Infine, dovresti esaminare se esiste una funzione di swap standard per la tua piattaforma / lingua - il C ++ STL, ad esempio, fornisce una funzione di scambio di template che tenderà ad essere altamente ottimizzata per il tuo compilatore / piattaforma.