我正在阅读地址中的一些 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 fiascoint 更复杂的类型。
    编辑
    至于“好处”,有多种解读方式。它要么是一种使您的代码更具可读性的方法(与使用指针实现的相同功能相反),要么您可以使用只能应用于左值的操作,如果您不返回引用,这是不可能的/指针但收到一个参数:
    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/

    10-11 18:43