gpt4 book ai didi

c++ - 为什么创建左值是在 C++ 中返回引用的好处之一?

转载 作者:太空狗 更新时间:2023-10-29 20:46:45 26 4
gpt4 key购买 nike

我正在以下地址阅读一些 C++ 文本:https://cs.senecac.on.ca/~chris.szalwinski/archives/oop244.071/content/custo_p.html .在 RETURNING A REFERENCE 一节中,作者写道:

"从函数返回引用有两个内在的好处:

  • 效率

  • 创建一个左值

我能理解第一个好处(效率),但不明白为什么是第二个。

正如作者所解释的,我可以理解什么是lvalue,但我不明白lvalue和函数返回引用之间的关系是什么,所以lvalue 变成了一个好处?

最佳答案

这只是意味着您可以赋值给函数的结果。考虑这个例子:

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++ - 为什么创建左值是在 C++ 中返回引用的好处之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com