从swap说引用

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指向的位置。
原文地址:https://www.cnblogs.com/bugutian/p/8327608.html