string& GetMyStr(string& somestr)
{
string & str=somestr;
//do something with str
return str;
}
str是一个本地对象,但为什么我还能在返回后得到这个值?我想在函数返回之后,它也消失了,并且没有引用返回值。我想我也想念它。
答案 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)