3

我正在以下地址阅读一些 C++ 文本:https ://cs.senecac.on.ca/~chris.szalwinski/archives/oop244.071/content/custo_p.html 。在返回参考的部分,作者写道:

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

  • 效率

  • 创建一个左值

"

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

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

4

1 回答 1

5

这仅仅意味着您可以为函数的结果分配一些东西。考虑这个例子:

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;
}
于 2011-09-12T02:36:20.177 回答