C++引用作为函数的返回值

我们都清楚C++中引用的本质其实是一个指针常量,引用的一些基本知识就不再赘述。这里我们将引用作为函数的返回值来讨论一下。

引用作为函数的返回值主要注意两个点:1、函数内部不能返回局部变量的引用;2、函数的调用可以作为左值存在。以下我们通过几个案例来说明这两个点。

案例一:函数内部不能返回局部变量的引用。

#include <iostream>
using namespace std;

int& mytest1()
{
    int a = 10;
    return a;
}

int& mytest2()
{
    static int a = 10;
    return a;
}

int main()
{
    // 本质是 int * const t1 = mytest1(); t1本质是一个指针常量,所以只能指向初始化的地址。
    int &t1 = mytest1();

    int &t2 = mytest2();
    cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl;
    cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl;
    cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl;
    cout<< "&t2 : " << &t2 << "\tt2 : " << t2 << endl;
    cout<< "&t2 : " << &t2 << "\tt2 : " << t2 << endl;
    cout<< "&t2 : " << &t2 << "\tt2 : " << t2 << endl;
    
    return 0;
}

执行结果如下:

根据上图的执行结果可知:当我们返回局部变量的引用时,由于函数的局部变量是在栈空间申请,函数执行完之后变量的空间就会被释放,编译器会保留一次值,第二次用会出错。而静态成员变量是在全局区申请的,程序执行完才会释放,所以引用可以返回被正常使用。

案例二:函数的调用可以作为左值存在。

#include <iostream>
using namespace std;

int& mytest()
{
    static int a = 10;
    return a;
}

int main()
{
    int &t1 = mytest();
    cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl;
	
    // 函数作为左值
    mytest() = 1234;
    cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl;

    return 0;
}

执行结果如下:

根据上图的执行结果可知:我们可以通过把函数作为左值来修改其返回值引用的值。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值