[英]Using reference return type function as a rvalue
我在问在这种情况下 string & func 和 string func 之间有什么区别。(即,如果我在这种情况下删除 & 符号会发生什么变化)。
string & func(string& a) {
return a;
}
int main()
{
string a = "42";
string b = func(a);
return 0;
}
& 字符表示您传递的是引用,而不是 object。 在这种情况下,function 将a
作为引用,并返回对同一 object 的另一个引用。 最后,您仍然只有一个字符串实例。
如果您删除 & 字符,那么 function 将返回您传入的字符串的副本。然后您将有 2 个字符串。
在您的特定示例中,它没有太大变化,因为有string b = func(a);
- 这意味着 function 返回一个引用,但使用此引用您正在制作名为b
的 object 的新副本。
问题中的程序没有说明两者之间的区别。 但是,这里有一些区别:
string& func(string& a)
上面的 function 返回一个对字符串的引用。 这意味着您将能够从func
的返回值更改原始字符串(在本例中a
)。 例如,以下内容:
func(a) = "some other string"
将修改a
并将其值设置为“其他字符串”。 但是,以下内容不会做同样的事情:
string b = func(a);
b = "some other string";
因为这里b
只接收字符串的副本。 如果上一个块被修改如下:
string& b = func(a);
b = "some other string";
然后它还将a
的值设置为“其他字符串”,因为这里b
本身就是对a
的引用。 其实相当于写:
string a = "42";
string& temp = a;
string& b = temp;
b = "some other string";
所以temp
和b
都指的是同一个字符串 - a
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.