string& GetMyStr(string& somestr)
{
string & str=somestr;
//do something with str
return str;
}
str是一个本地对象,但为什么在返回后我仍然可以获取其值?我认为在函数返回后,它也应该消失并且返回值没有被引用。我想我可能错了。
string& GetMyStr(string& somestr)
{
string & str=somestr;
//do something with str
return str;
}
str是一个本地对象,但为什么在返回后我仍然可以获取其值?我认为在函数返回后,它也应该消失并且返回值没有被引用。我想我可能错了。
somestr
,然后使str
指向该对象,所以str
不是一个本地对象,而是对调用者传递给函数的对象的引用。string & str=somestr;
然后你将它作为引用返回。与此同时,对 str
所做的任何操作都是针对 somestr
进行的,因此调用者的参数会被修改。
如果您打印传递给 GetMyStr
的参数,然后打印该调用的返回值,您会发现字符串相同(或者您可以比较地址,这些也将是相同的)。
somestr
是一个引用,因此它指向了一个在 GetMyStr
范围之外的对象。因此,在 GetMyStr
返回后,它仍然存在,可以安全地使用它。如果 somestr
不是一个引用,那么情况会大不相同,因为你将返回一个对象的副本(一个局部变量)的引用。
我想我在下面提到的主题中问了一个类似的问题。你可以看一下这个。几分钟后,对我来说变得很清楚! :) (虽然我正在讨论指针,但没有其他令人困惑的地方:D)
string str=somestr;
,这不再是一个引用了,对吧?或者当传递的参数不是引用时,在我的编译器上仍然可以工作。 - Baby Dolphinstring str=somestr;
时返回对str
的引用,那么它将被销毁,因为你返回了一个指向本地对象的引用。 - Seth Carnegie