这仅仅意味着您可以为函数的结果分配一些东西。考虑这个例子:
int& foo() {
static int x;
return x;
}
void bar() {
foo() = 42;
}
int
当然,这也适用于类对象,而不是。关键是,通过返回x
对调用者的引用,可以直接在foo
. 这就是作者所说的引用返回值“创建一个左值”的意思。
顺便说一句,该示例实际上有一个应用程序,因为它解决了比int
.
编辑
至于“利益”,有几种解读方式。它要么是使您的代码更具可读性的一种方式(与使用指针实现的相同功能相反),要么您可以使用只能应用于左值的操作,如果您不返回引用,这是不可能的/指针但收到一个参数:
struct X {
int a;
int b;
};
class Y_withoutRefs {
private:
X x;
public:
void setXa(int a) {
x.a = a;
}
int getXa() {
return x.a;
}
void setXb(int b) {
x.b = b;
}
int getXb() {
return x.b;
}
};
class Y_withRefs {
private:
X x;
public:
X& getX() {
return x;
}
};
void dosmth() {
Y_withoutRefs ywo;
Y_withRefs yw;
ywo.setXa(50+ywo.getXa());
yw.getX() += 50;
}