這個問題很舊–我今天偶然發現了......
......並且想知道爲什麼之前沒有人給出這個答案......
我認爲,這是可能做到這一點在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++語言正確拼寫)...
可能要提及異或技巧也只適用於整型。另外,整數升級可以防止溢出,但是兩個相同類型不會溢出,異或操作0b1110 xor 0b1010將始終爲0b1100,這是一個按位操作 – Beached 2017-10-12 02:56:24