Этот вопрос очень старый & ndash; Я только что наткнулся на это сегодня ...
... и удивлялся, почему никто не дал такой ответ раньше ...
Я думаю, это возможно сделать в C ++ 11 подобно тому, как это делает Python (под капотом):
#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;
}
Я пробовал это на ideone.com . Выход был:
Before assignment: a: 4, b: 5
After assignment : a: 5, b: 4
Если я правильно помню (я не эксперт по Python), в Python a, b
обозначает пару. ( Python Doc .: 5.3. Кортежи и последовательности )
Такую пару можно легко сделать в C ++ 11, например. с std::pair
. В этом случае я сделал пару ссылок и назначил пару значений. Он работает, когда make_pair()
загружает обе переменные до того, как правая пара (значений) будет присвоена левой паре ссылок.
Снова прокручивая, я понимаю, что этот ответ близок к основанному на ускорении решению Йоханнесу .
Может быть, причина в том, что он не работал в C ++ 03. Я попытался в coliru.stacked-crooked.com: с -std=c++03
ужасно читать ошибки компилятора & ndash; меняется на -std=c++11
, и он прекрасно компилируется и выполняется, как описано выше.
Отказ
Я просто не могу себе представить, для чего это решение хорошо, и какую практическую ценность оно может иметь. Это не то, что я пытался сделать. Как и во многих других ответах, говорится: «Это не работает». ИМХО, это так (написание это правильно в соответствии с языком C ++) ...