Câu hỏi này là rất cũ – Tôi chỉ cần stumbled vào nó hôm nay ...
... và tự hỏi tại sao không ai đưa ra câu trả lời này trước khi ...
Tôi nghĩ rằng, nó có thể làm điều đó trong C++ 11 tương tự như Python thực hiện nó (dưới mui xe):
#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;
}
Tôi cố gắng này trên ideone.com. Đầu ra là:
Before assignment: a: 4, b: 5
After assignment : a: 5, b: 4
Nếu tôi nhớ đúng (Tôi không phải là chuyên gia về Python), trong Python, a, b
biểu thị một cặp. (Python Doc.: 5.3. Tuples and Sequences)
Cặp như vậy có thể được thực hiện trong C++ 11 dễ dàng, ví dụ: với std::pair
. Trong trường hợp này, tôi đã tạo một cặp tham chiếu và gán cặp giá trị. Nó hoạt động như là make_pair()
tải cả hai biến trước khi cặp bên phải (của các giá trị) được gán cho cặp tham chiếu bên trái.
Cuộn lại, tôi nhận thấy câu trả lời này gần với giải pháp dựa trên tăng của Johannes answer.
Có thể, lý do là nó không hoạt động trong C++ 03. Tôi đã thử trong coliru.stacked-crooked.com: Với -std=c++03
nó mang lại hiệu quả khủng khiếp khi đọc lỗi biên dịch – thay đổi thành -std=c++11
và nó biên dịch và thực hiện tốt như mô tả ở trên.
Disclaimer
Tôi chỉ không thể tưởng tượng những gì giải pháp này là tốt cho hay những gì thực tế giá trị của nó có thể có. Đây không phải là những gì tôi đã cố gắng làm. Như nhiều câu trả lời khác nói "Nó không hoạt động." IMHO nó (chính tả nó đúng theo ngôn ngữ C++) ...
có thể muốn đề cập đến thủ thuật xor cũng chỉ hoạt động trên các loại tích phân. Ngoài ra, quảng cáo số nguyên sẽ giữ cho nó không bị tràn nhưng hai cùng loại sẽ không tràn với một hoạt động xor 0b1110 xor 0b1010 sẽ luôn là 0b1100 ở đây là hoạt động bitwise – Beached