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指向的位置。

 

posted on 2018-01-22 09:43  步孤天  阅读(309)  评论(0编辑  收藏  举报