Я узнал, что операция Xor может использоваться для реализации эффективной функции свопинга. например:
template<class T>
void swap(T& a, T& b)
{
a = a^b;
b = a^b;
a = a^b;
}
Но реализация swap, которую я могу найти в Интернете, по существу выглядит следующим образом:
template<class T>
void swap(T& a, T& b)
{
T temp(a);
a = b;
b = temp;
}
Кажется, что компилятор не сгенерировал тот же код для двух вышеперечисленных форм, потому что я тестировал его на VС++ 2010, а первый выполнил работу быстрее (и быстрее, чем std:: swap). Есть ли переносная или любая другая проблема с первой? Не стесняйтесь исправить любую из моих ошибок, потому что я не владею английским языком и не очень хорош на С++.