Это будет работать? Да.
Вы должны использовать это? Нет.
Это своего рода микро-оптимизации будет иметь смысл , если:
Вы посмотрели на код, сгенерированный компилятором, для простого способа сделать это (назначение и временный) и решили, что подход XOR генерирует более быстрый код
Вы профилировали свое приложение и обнаружили, что стоимость простого подхода перевешивает ясность кода (и, как следствие, экономию в обслуживании)
Прежде всего, если вы не сделали это измерение, вы должны доверять компилятору. Когда семантика того, что вы пытаетесь сделать, ясна, компилятор может сделать много хитростей, включая перестановку доступа к переменным так, чтобы своп вообще не требовался, или встраивание любых инструкций машинного уровня, обеспечивающих самый быстрый своп для данного типа данных. Такие «хитрости», как своп XOR, затрудняют компилятору видеть, что вы пытаетесь сделать, и, следовательно, уменьшают возможность применения такой оптимизации.
Во-вторых, что вы получаете за дополнительную сложность? Даже если вы измерили и нашли XOR-подход быстрее, достаточно ли это влияния, чтобы оправдать менее четкий подход? Откуда вы знаете?
Наконец, вы должны посмотреть, есть ли стандартная функция подкачки для вашей платформы / языка - например, C ++ STL предоставляет функцию подстановки шаблонов, которая, как правило, будет высоко оптимизирована для вашего компилятора / платформы.