形式
<类型> & 函数名(参数)
函数的返回类型决定函数调用是否返回左值,返回左值的函数可以像左值一样来使用。特别的是,我们能为返回类型是非常量引用的函数的结果赋值。
调用的返回值就是一个指向res[0]的引用
string& change(vector < string > & s, int index)
{
return s[index];
//假定index索引有效
}
int main()
{
vector<string > res = {"ceshi","test"};
change(res, 0)="sssss";
cout << res[0] << endl;
}
这样做可以提升效率,如果用普通的函数返回常量值,会涉及到内存拷贝。因为需要讲返回值放入到特定内存中。返回引用左值则免去了将返回值放入特定内存这一步。
注意
不能返回一个局部变量的引用
例如(错误的代码)
int& f()
{
int a;
return a;
}
返回主调函数后局部变量会释放,这样,返回的引用就绑定了一个不存在的左值
如果非要返回一个主调中没有的变量,可以用new动态申请
但是极容易造成内存泄漏,因为我们不一定清楚函数的实现,所以可能忘记使用delete释放这个空间。