返回本地字符串对象的引用

时间:2011-08-23 01:30:35

标签: c++

string& GetMyStr(string& somestr)
{
   string & str=somestr;
   //do something with str
   return str;
}

str是一个本地对象,但为什么我还能在返回后得到这个值?我想在函数返回之后,它也消失了,并且没有引用返回值。我想我也想念它。

4 个答案:

答案 0 :(得分:8)

因为您正在返回对函数外部存在的参数的引用。您通过引用将参数作为somestr,然后使str引用该对象,因此str 是本地对象,而是对调用者传递给函数的对象。

这将创建对传入的参数的引用:

string & str=somestr;

然后将其作为参考返回。同时对str执行的任何操作都是somestr完成的,因此调用者的参数被修改。

你会看到,如果你打印传递给GetMyStr的参数然后打印那个字符串是相同的那个调用的返回值(或者你可以只比较那些也是相同的地址)。

答案 1 :(得分:1)

somestr是一个引用,因此指的是GetMyStr范围之外的对象。因此,它会在GetMyStr返回后仍然存在,允许您安全地使用它。如果somestr不是引用,那将会有很大的不同,因为那样你就会返回对该对象副本的引用(一个局部变量)。

答案 2 :(得分:1)

  

str是一个本地对象

不,不是。 str的类型为string&,因此它是一个参考。特别是,它指的是通过引用传递的somestr;也就是说,调用者的字符串。在函数返回后,这显然仍然存在。

答案 3 :(得分:0)

我想我在下面提到的帖子中提出了一个类比问题。你可以看看这个。几分钟后我就清楚了! :)(虽然我正在讨论指针,但没有什么可以混淆的:D)

Pointer - returning Local reference in C++