引用做函数返回值
注意两点:
1,不能返回局部变量引用
int& test1()
{
int a = 10;
return a;
}
int main()
{
int& ret1 = test1();
cout << "ret1 = " << ret1 << endl;
cout << "ret1 = " << ret1 << endl;
return 0;
结果:
局部变量储存在栈区,函数调用结束后就会释放
第一次结果正确,因为编译器做了保留
第二系打印错误,是因为a的内存已经释放
int& test2()
{
static int a = 10;
return a;
}
int main()
{
int& ret2 = test2();
cout << "ret2 = " << ret2 << endl;
cout << "ret2 = " << ret2 << endl;
return 0;
}
换成静态变量,静态变量储存在全局区,在程序结束后系统释放,因此打印两次都正确
2,函数调用作为左值
int& test2()
{
static int a = 10;
return a;
}
int main()
{
int& ret2 = test2();
cout << "ret2 = " << ret2 << endl;
cout << "ret2 = " << ret2 << endl;
test2() = 100;
cout << "ret2 = " << ret2 << endl;
cout << "ret2 = " << ret2 << endl;
return 0;
}
为什么后面两个返回的是100?
test2() 返回的是a的引用,test2() = 100相当于是给a再赋值100,打印的ret2相当于是a的别名,因此ret2和test2()也可以访问到这块内存。