Esta pregunta es muy antigua – Me tropecé con ella hoy ...
... y me preguntaba por qué nadie dio esta respuesta antes ...
creo, es posible hacerlo en C++ 11 similar como lo hace Python (bajo el capó):
#include <iostream>
using namespace std;
int main()
{
int a = 4, b = 5;
cout << "Before assignment: a: " << a << ", b: " << b << endl;
pair<int&, int&> ba(b, a);
ba = make_pair(a, b); // <===: (b, a) = (a, b)
cout << "After assignment : a: " << a << ", b: " << b << endl;
return 0;
}
He intentado esto en ideone.com. La salida fue:
Before assignment: a: 4, b: 5
After assignment : a: 5, b: 4
Si no recuerdo mal (no soy un experto en Python), en Python, a, b
denota un par. (Python Doc.: 5.3. Tuples and Sequences)
Este par se puede hacer en C++ 11 fácilmente, p. Ej. con std::pair
. En este caso, hice un par de referencias y asigné el par de valores. Funciona como make_pair()
carga ambas variables antes de asignar el par correcto (de valores) al par de referencias izquierdas.
Desplazándome de nuevo, me doy cuenta de que esta respuesta está cerca de la solución basada en impulso de Johannes answer.
Puede ser, la razón es que no funcionó en C++ 03. Intenté en coliru.stacked-crooked.com: Con -std=c++03
, resulta terrible leer los errores del compilador – cambiando a -std=c++11
y compila y ejecuta correctamente como se describe arriba.
Negación
No puedo imaginar lo que esta solución es buena para la práctica ni lo que vale la pena que pueda tener. Esto no es lo que traté de hacer. Como muchas otras respuestas dicen "No funciona". En mi humilde opinión (deletreado correctamente de acuerdo con el lenguaje C++) ...
podría querer mencionar que el truco xor también solo funciona en tipos integrales. Además, la promoción entera evitaría que se desborde, pero dos del mismo tipo no se desbordará con una operación xor 0b1110 xo 0b1010 siempre será 0b1100 en una operación en modo bit – Beached