Zmienianie wartości dwóch zmiennych przez operatora xor przy użyciu odwołań lub wskaźników

Mam dwie zmienne całkowite i oraz j, a ja chcę utworzyć funkcję, która przyjmuje te dwie zmienne jako argument i zamienia ich zawartość za pomocą operatora xor. Teraz, jeśli sprawię, że funkcja przyjmuje argumenty według wartości, tjvoid swap (int x , int y);(z ciałem funkcji takim samym jak dla funkcjiswap poniżej) wartości są ładnie zamieniane w funkcji. Ale ponieważ to, czego chcę, to zamiana wartości zmiennych w funkcji wywołującej, użyłem przekazywania argumentów przez odwołanie (a także przez wskaźniki):

void swap ( int& x , int& y )
{
    x^=y^=x^=y;
    cout << x<< " " << y << endl ;
}

int main ()
{
    int i (1), j (2) ;
    swap ( i, j ) ;
    cout << i << " " << j << endl ;
}

ale żaden przypadek nie pokazał poprawnego wyniku!

Dlaczego jestswap&nbsp;funkcja nie zamienia wartości na przekazywanie argumentów przez odniesienie lub wskaźniki?