¿Funcionará? Sí.
¿Deberías usarlo? No.
Este tipo de micro-optimización tendría sentido si:
ha mirado el código que genera el compilador para la forma directa de hacerlo (asignación y temporal) y ha decidido que el enfoque XOR genera un código más rápido
ha perfilado su aplicación y ha encontrado que el costo del enfoque directo supera la claridad del código (y los ahorros resultantes en mantenimiento)
Hasta el primer punto, a menos que haya hecho esta medición, debería confiar en el compilador. Cuando la semántica de lo que está tratando de hacer es clara, el compilador puede hacer muchos trucos, incluyendo reorganizar el acceso variable para que no sea necesario el intercambio, o alinear las instrucciones de nivel de máquina que proporcionen más rápido intercambiar por un tipo de datos dado. Los "trucos" como el intercambio XOR hacen que sea más difícil para el compilador ver lo que está tratando de hacer y, por lo tanto, es menos capaz de aplicar tales optimizaciones.
Para el segundo punto, ¿qué está ganando por la complejidad añadida? Incluso si ha medido y encontrado el enfoque XOR más rápido, ¿está teniendo suficiente impacto para justificar un enfoque menos claro? ¿Cómo lo sabes?
Finalmente, debe analizar si existe una función de intercambio estándar para su plataforma / lenguaje: el STL de C ++, por ejemplo, proporciona una función de intercambio de plantillas que tenderá a estar altamente optimizada para su compilador / plataforma.