繁体   English   中英

使用引用返回类型 function 作为右值

[英]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";

所以tempb都指的是同一个字符串 - a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM