首先使用“引用”作为函数的返回值最大的好处就是编译器不会在内存中定义一个临时变量,可以节约内存的开销,尤其是当定义的全局变量是一个类的对象时,如果使用“引用”作为函数的返回值,那么在调用函数给变量赋值的过程中编译器不会去调用类的构造函数和析构函数,这样在时间和空间上的开销都会减少很多。
下面用一个例子来看一下
#include<iostream>
using namespace std;
int a = 10;
int test(int b) {
a = a + b;
return a;
}
int main()
{
int c = test(2);
cout << c << endl;
system("pause");
return 0;
}
这种情况写的赋值过程如下图所示,其中的临时变量就是编译器自己去开辟的一片空间。

而使用“引用”作为函数的返回值呢?
#include<iostream>
using namespace std;
int a = 10;
int& test(int b) {
a = a + b;
return a;
}
int main()
{
int c = test(2);
cout << c << endl;
system("pause");
return 0;
}
其赋值的情况如下图所示,虽然最终我们得出结果是一样的,但其中的过程确实完全不一样的,时间和空间上的开销也是完全不一样的,尤其是对对于芯片行业,程序运行的效率尤为重要。

说完了它的好处呢,我们就再来说一下它的注意事项,我们可以看到使用“引用”作为函数返回值呢,都是定义了一个全局变量的,然后我们返回这个全局变量的引用。
因此注意:当使用“引用”作为函数的返回值时,一定不可以返回局部变量,因为局部变量是随时可能被销毁的,而在函数外面一旦使用引用类型来接收这个引用类型的返回值,就会给程序带来未知的风险。