ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-09-03 01:05:12  阅读:222  来源: 互联网

标签:c lvalue


我正在地址阅读一些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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有