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