首先,问题是拿函数返回其引用,值的释放问题。

1 返回局部变量引用:

直接上源码看效果:

#include<iostream>
using namespace std;


//引用做函数返回值
//返回局部变量引用
int& test01() {

	int a = 10;
	return a;
}


int main()
{
	
	//不能返回局部变量引用
	int& ref = test01();
	//局部变量已经被释放,因为编译器做了保留,第二次输出结果就会错误 
	cout << "ref = " << ref << endl;//输出 10
	cout << "ref = " << ref << endl;//输出乱码
	system("pause");
	return 0;
}

结果:第一次输出是10,正确;第二次输出乱码,错误。

ref = 10
ref = 2077342096
请按任意键继续. . .

2 返回静态变量引用:

#include<iostream>
using namespace std;


//引用做函数返回值
//返回局部变量引用
int& test01() {

	int a = 10;
	return a;
}
//返回静态变量引用
int& test02() {

	static int a = 10;//静态变量。存放在全局区,全局区上的数据在程序结束后系统释放
	return a;
}

int main()
{
	
	//不能返回局部变量引用
	//int& ref = test01();
	//局部变量已经被释放,因为编译器做了保留,第二次输出结果就会错误 
	//cout << "ref = " << ref << endl;//输出 10
	//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;
}

结果:如果函数的返回值是引用,这个函数的调用可以作为左值

ref2 = 10
ref2 = 10
ref2 = 1000
ref2 = 1000
请按任意键继续. . .