返回带有和不带引用的C ++向量&符号

时间:2015-05-27 13:55:38

标签: c++ function vector reference

这个答案here使用的是*而不是&,所以虽然这是一个很好的阅读,但我不明白它与我的问题有什么关系。

当我返回带有和没有&的std :: vector时,我有点困惑。

例如,如果我的函数定义如下所示:

std::vector < foo > & myFunction(...)
{
   //myVector is made
   return myVector;
}

或者这个:

std::vector < foo > myFunction(...)
{
   //myVector is made
   return myVector;
}

这里唯一的区别是第一个函数返回&,第二个函数不是。

我的代码似乎在任何一种情况下都有效,但我不确定为什么......这里到底发生了什么?感谢。

1 个答案:

答案 0 :(得分:3)

引用只是对象的别名。在第一个函数中,您将返回对本地对象的引用,该对象在函数末尾被销毁。这是错误,因为在通话结束后,您最终会得到一个名为悬空引用的内容,即不再存在的对象的别名

第二种形式没问题,因为您返回本地对象的副本。通常,您通常会返回对i)通过引用传递给函数的参数的引用,ii)函数中定义的静态对象(感谢@davidhigh注释)或iii)非本地对象。