这个答案here使用的是*
而不是&
,所以虽然这是一个很好的阅读,但我不明白它与我的问题有什么关系。
当我返回带有和没有&的std :: vector时,我有点困惑。
例如,如果我的函数定义如下所示:
std::vector < foo > & myFunction(...)
{
//myVector is made
return myVector;
}
或者这个:
std::vector < foo > myFunction(...)
{
//myVector is made
return myVector;
}
这里唯一的区别是第一个函数返回&
,第二个函数不是。
我的代码似乎在任何一种情况下都有效,但我不确定为什么......这里到底发生了什么?感谢。
答案 0 :(得分:3)
引用只是对象的别名。在第一个函数中,您将返回对本地对象的引用,该对象在函数末尾被销毁。这是错误,因为在通话结束后,您最终会得到一个名为悬空引用的内容,即不再存在的对象的别名
第二种形式没问题,因为您返回本地对象的副本。通常,您通常会返回对i)通过引用传递给函数的参数的引用,ii)函数中定义的静态对象(感谢@davidhigh注释)或iii)非本地对象。