这个问题很老了——我今天才偶然发现...
...并想知道为什么以前没有人给出这个答案...
我认为,在 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. Tuples and Sequences)
这样的配对可以在 C++ 11 中轻松完成,例如与std::pair。在这种情况下,我做了一对引用并分配了这对值。它的工作原理是 make_pair() 在将右侧(值)对分配给左侧引用对之前加载两个变量。
再次滚动,我意识到这个答案接近Johannes answer 的基于提升的解决方案。
可能是,原因是它在 C++03 中不起作用。我在 coliru.stacked-crooked.com 中尝试过:使用 -std=c++03 会产生可怕的编译器错误读取 - 更改为 -std=c++11 并且它编译和执行都很好,如上所述。
免责声明
我无法想象这个解决方案有什么好处,也无法想象它有什么实际价值。这不是我试图做的。正如许多其他答案所说“它不起作用”。恕我直言(根据 C++ 语言拼写正确)...