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