为什么创建左值是在C中返回引用的好处之一?
作者:互联网
我正在地址阅读一些C文本:https://cs.senecac.on.ca/~chris.szalwinski/archives/oop244.071/content/custo_p.html.
在“回顾参考”一节中,作者写道:
“
从函数返回引用有两个固有的好处:
>效率
>创建一个左值
“
我能理解第一个好处(效率),但不明白为什么是第二个好处.
正如作者解释的那样,我可以理解什么是左值,但是我不明白左值和从函数返回引用之间的关系是什么,以便左值成为一个好处?
解决方法:
这只是意味着你可以为函数的结果赋值.考虑这个例子:
int& foo() {
static int x;
return x;
}
void bar() {
foo() = 42;
}
当然,这也适用于类对象,而不是int.关键是通过返回对x的引用,调用者可以直接在foo中分配本地范围的变量.这就是作者的意思,即引用返回值“创建左值”.
顺便说一下,该示例实际上有一个应用程序,因为它解决了static initialisation order fiasco比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;
}
标签:c,lvalue 来源: https://codeday.me/bug/20190903/1794618.html