C++的引用类型是个很奇妙的存在,比如下面这个例子:
#include<iostream> using namespace std; void swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } int main() { int a=1,b=2; swap(a,b); cout<<a<<endl<<b<<endl; return 0; }
结果
2
1
没有问题。
但是swap中的过程却并非如此。
int tmp = a; //引用a作为右值,会将数据复制到tmp变量中
a = b; //引用b作为右值,会将数据复制到临时的变量中,然后再复制到引用a代表的位置
b = tmp; //tmp将值赋值到引用b指向的位置。