引用做函数返回值

作用:引用可以作为函数的返回值存在

注意:不要返回局部变量的引用

用法:函数调用作为左值

//返回局部变量引用
int& test01() {
 int a = 10; //局部变量
 return a;
}
//返回静态变量引用
int& test02() {
 static int a = 20;
 return a;
}
int main() {
 //不能返回局部变量的引用
 int& ref = test01();
 cout << "ref = " << ref << endl;
 cout << "ref = " << ref << endl;
 //如果函数做左值,那么必须返回引用
 int& ref2 = test02();
 cout << "ref2 = " << ref2 << endl;
 cout << "ref2 = " << ref2 << endl;
 test02() = 1000;
 cout << "ref2 = " << ref2 << endl;
 cout << "ref2 = " << ref2 << endl;
 system("pause");
 return 0;
}

在这个 C++ 程序中,我们可以看到两个函数:test01test02,这两个函数都返回一个整型引用(int&)。然而,这两个函数的行为和风险是截然不同的,由于它们分别返回的是局部变量的引用和静态变量的引用。

int& test01() {
    int a = 10; // 局部变量
    return a;
}

这个函数试图返回一个局部变量 a 的引用。局部变量在函数的执行结束时会被销毁,它的内存空间被释放。因此,返回局部变量的引用是非常危险的,因为返回的引用指向一个已经不存在的变量。这会导致未定义行为,程序可能输出不可预测的结果或者导致程序崩溃。

main 函数中,当我们尝试通过引用 ref 访问 test01 返回的值时,我们实际上是在访问一个已经被销毁的变量的内存位置。这种情况下,输出可能是任意值,或者可能触发运行时错误。

int& test02() {
    static int a = 20;
    return a;
}

这个函数返回一个静态局部变量 a 的引用。静态局部变量的特点是它们在第一次声明时被初始化,并在程序的整个运行期间持续存在,直到程序终止。因此,返回静态局部变量的引用是安全的。

main 函数中,引用 ref2 能安全地访问并持续使用 test02 返回的静态变量 a。因为 a 在程序的整个生命周期内都有效,所以 ref2 始终指向一个有效的、可访问的 int 值。甚至可以通过这个引用来修改静态变量的值,如 test02() = 1000; 所做的那样,这改变了 a 的值,并通过所有指向 a 的引用反映出来。

总结

  1. 永远不要返回局部非静态变量的引用。 这是因为它们在函数执行完毕后就会被销毁。栈区
  2. 返回静态局部变量的引用是安全的, 因为它们在整个程序运行期间都保持存在。全局区
  3. 这个例子很好地说明了在 C++ 中使用返回引用时需要注意的内存管理和作用域规则。
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值