【问题标题】:How does this code give you a reference using an integer?这段代码如何使用整数为您提供参考?
【发布时间】:2019-09-12 06:23:39
【问题描述】:

我正在阅读关于左值和右值的article。我不太明白这段代码:

int x;
int& getRef ()
{
    return x;
} 
getRef() = 4;

首先,return x 如何为您提供x 的引用?不应该是return addressof(x)之类的吗?

其次,getRef() = 4 到底是做什么的?这应该是一个任务吗?我在这里不知所措。

【问题讨论】:

  • what exactly does getRef() = 4 do?。由于getRef() 返回对x 的引用,getRef() = 4 会将4 分配给x
  • 类似“addressof some_thing”的东西是地址运算符&,它给你一个指针。引用不需要那个。至于getRef() = 4; 的工作原理,请思考或类似int& temp = getRef(); temp = 4; (它不完全是那样,但希望能帮助您了解正在发生的事情)。

标签: c++ reference


【解决方案1】:

return x 如何为您提供对 x 的引用

这样做是因为它不是int getRef,而是int& getRef。你是对的,return x; 没有告诉我们是否返回引用可能有点令人困惑。如果没有&,它将无法工作,并在getRef() = 4; 处为您提供编译时错误。

其次,getRef() = 4 究竟是做什么的?这是假设是一个 任务?我在这里不知所措。

没错。它将4 分配给x。这是有效的,因为引用是一个左值。

【讨论】:

  • 不应该使用return referenceof(x)之类的东西吗?我理解return x 的方式是它返回存储在x 中的值。 return x的新含义是C++11的一个特性吗?还是因为return x 与外部的& 运算符组合并被评估为指针?
  • 没错,return x 返回引用是因为函数签名中的&。没有它,它将返回一个副本。设计该语言的人可能认为 return referenceof(x) 不是必需的,因为根据函数签名中的内容,只有引用或值(而不是两者)是有效的。
  • 你知道C++什么时候实现了return x这个含义吗?还是从一开始就存在?
  • 从一开始就存在。
  • 我以为我很清楚。 T_T
【解决方案2】:

虽然引用不是指针,但它们的行为通常很像指针,并且大多数使用引用的代码都可以使用指针来编写。指针更灵活、更强大、更容易混淆和更危险,所以通常最好使用引用,除非你真的需要指针。同样的代码可以写成这样的指针:

int x;
int* getPtr ()
{
    return &x; // return pointer to x
} 
*(getPtr()) = 4; // assign value to what the pointer points to

为了进一步阅读,这个 QA 有一些好东西:When to use references vs. pointers

【讨论】:

    【解决方案3】:

    从代码质量的角度来看,这是一个相当粗略的例子。

    函数返回对全局变量x的引用(因为它被声明为返回引用,而x被传递给return)

    由于Funktion返回一个引用,你可以直接对返回值进行赋值,因为最后它就像一个指针

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      相关资源
      最近更新 更多