- 错误示范
- 正确用法
- 返回局部变量的引用
最近在刷黑马程序员的C++入门视频,发现一个在C语言中没见过的用法,函数返回值作为左值使用
链接: 黑马程序员C++入门视频.
首先来看下它的错误使用
int& test1()
{
int a = 10;
return a;
}
int main()
{
//错误示范代码
//不能返回局部变量的引用
int& ret1 = test1();
//第一遍ret会正确显示10
cout << "ret1=" << ret1 << endl;
//第二遍打印会显示一个随机值
cout << "ret1=" << ret1 << endl;
}
此时的变量a是函数块内的局部变量,函数执行完毕就会释放内存。
这里直接return a会导致引用接收的值是地址的随机值,
但这里还有一个更离谱的是,函数块属于栈空间,
理论上函数块已经释放了,但实际上,它的内存值还在,
只要没有新的函数块来占用它的内存,它就会存在,
也就是能取到地址的上的值,关于函数块的栈空间解读,
请戳这里: 函数块的栈空间解读
static静态变量的引用
int& test2()
{
static int a = 20;
return a;
}
int main()
{
//用了static,函数块结束后,变量a不会被释放
int& ret2 = test2();
//函数返回值做左值,必须是引用
//无论输出几次,都是20
cout << "ret2=" << ret2 <
2021/10/12第二次修改



