引用

概念

下面的写法定义了个引用,并将其初始化为引用某个变量

类型名 & 引用名 = 某变量名;

Example

int n=4;
int & r=n; //r引用了n,r的类型是 int &

某个变量的引用,等价于这个变量,相当是别名。

注意

  1. 引用定义的时候,一定要将其初始化成某个变量
  2. 初始化后,它就一直引用该变量,不会再引用别的变量了
  3. 引用只能用于引用变量,不能引用常量表达式

Example:

double a=4,b=5;
double& r1=a;
double& r2=r1;
r2 = 10;
r1 = b;    //赋值 而不是修改引用

此时a=b=5

简单用法

  1. 交换变量的值

    c

    void swap(int* a,int* b){
        int tmp = *a;
        *a = *b;*b = tmp;
    }
    
    swap(&n1,&n2);

    c++

    void swap(int& a,int& b){
        int tmp=a;
        a = b;b = tmp;
    }
    swap(n1,n2);
  2. 作为函数的返回值

    注意的是,cpp不需要你的返回值带&号,只需要写上变量,就会转型

    int n=4;
    int& setValue(){return n;}
    int main(){
        setValue() = 40;
        cout << n;
        return 0;
    }

常引用

在定义前,加上const关键字。加上后,我们不能通过这个引用修改值。

int n=100;
const int& r=n;
r = 200; //出错
n = 100; //正常

常引用和非常引用间的转换

const T&T&是不同的类型!

  1. T&类型可以用TT&来初始化,不能用const Tconst T&,需要进行强转换
  2. const T&类型可以用T,T&,const Tconst T&来初始化

奇妙的例子

Example1

void swap(int*& a,int*& b)
{
    int * tmp = a;
    a = b;
    b = tmp;
}

int main()
{
    int a = 3,b = 5;
    int * pa = & a;
    int * pb = & b;
    swap(pa,pb);
    cout << *pa << "," << * pb;
    return 0;
}

Example2

int& getElement(int * a, int i)
{
    return a[i];
}
int main()
{
    int a[] = {1,2,3};
    getElement(a,1) = 10;
    cout << a[1] ;
    return 0;
}
Last modification:February 28th, 2020 at 11:19 am
Compared with money, your comment could inspire me more.
相较于钱财,你的留言更能激发我创作的灵感