C++函数返回引用

c++返回引用

1.形式

<类型> & 函数名(参数)

例:
int &Swap(int &a, int &b);

int main() {

    int a = 3, b = 5;

    cout << "交换前:a = " << a << ", b = " << b << endl;
    cout << "&Swap(a, b) = " << &Swap(a, b) << ", &a = " << &a << endl;
    cout << "交换后:a = " << a << ", b = " << b << endl;

    return 0;
}

int &Swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;

    return a;
}

输出:

交换前:a = 3, b = 5
&Swap(a, b) = 00AFF7C4, &a = 00AFF7C4
交换后:a = 5, b = 3

调用的返回值就是一个指向a的引用

2.与传统返回的不同

i>传统返回

int main(){

    double a = sqrt(25.0);
    return 0;
}

首先,sqrt()将返回值放入特定的内存中,然后再将这个值赋给a

ii>返回引用

int main(){

    int a = 3, b = 5;
    int c = Swap(a, b);//1中的例子
    return 0;
}

Swap()返回指向a的引用,所以这里的赋值相当于c = a,这样就免去了将返回值放入特定内存这一步,提高了效率

3.特别注意

//不要这样返回
int &f(/*参数列表*/){
    ...
    int x;//这是一个局部变量
    ...
    return x;
}

返回主调函数后局部变量会释放,这样,返回的引用就绑定了一个不存在的左值

如果非要返回一个主调中没有的变量,可以用new动态申请

int &f(/*参数列表*/){
    ...
    int *px = new int;//
    ...
    return *px;
}

这里还要特别注意,这里极容易造成内存泄漏,因为我们不一定清楚函数的实现,所以可能忘记使用delete释放这个空间

你可能感兴趣的:(C++)