为什么通过引用 return 是有利的?

Why is it advantageous to return by reference?

我知道经验法则是我们 return 通过引用当且仅当 returned 变量存在于调用者中。 假设我们有一个函数:

int& f(int& a){ return a; }

现在,在调用方中,我可以通过两种方式调用:

int a = 5;
int b1 = f(a); // 1
int& b2 = f(a); // 2 

不同之处在于调用者中 b1 或 a 的变化不会相互影响,但调用者中 b2 或 a 的变化会相互影响。

这意味着,a 引用 int 被调用者的内容被复制到 b2,而由于上述语句,似乎只有 a 在被调用者中引用的值被复制到 b1。

那么 return 像第一种情况一样通过引用进行复制的优点是什么? 看到像 1 这样的语句的示例是复制赋值运算符,它通过引用 returns 来链接赋值: 例如:obj1 = obj2 = obj3;

我是不是漏掉了什么?

坦率地说,你的论点没有实际意义。

按照同样的推理思路,您可能会争辩说一般来说使用引用没有任何优势,因为它可以用来制作副本:

int x = 42; 
int& ref = x;
int y = ref;    // makes a copy

但是,仅仅因为您可以使用引用来制作副本并不会降低引用的可用性:

ref = 24;  // does modify x 

在你的例子中:

int a = 5;
int b1 = f(a); // 1
int& b2 = f(a); // 2

来电者决定在// 1进行复制,这与f几乎没有任何关系。当然,您可以使用引用来制作副本。但是不能用副本修改a:

  f(a) = 42;   // modifies a

这仅在 f returns 引用时按预期(修改 a)工作。

打个比方,你可以问:坐飞机有什么好处?飞机可以像汽车一样在地面上行驶;)