为函数返回引用赋值

use*_*567 6 c++ return-type return-value

#include<iostream>
using namespace std;

int &fun()
{
  static int x = 10;
  return x;
}
int main()
{
   fun() = 30;
   cout << fun();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

函数fun()通过引用返回值,但是在main()方法中我将一些int分配给函数.理想情况下,编译器应该显示像左值所需的错误但在上面的情况下程序工作正常.为什么会这样?

Ker*_* SB 7

说"一个函数返回一些东西"是松散而草率的语言.如果你知道如何使用它,那么它可以作为速记,但在这种情况下你会感到困惑.

考虑它的更正确的方法是评估函数调用表达式.这样做会给你一个价值.值是rvalue或左值(模数细节).

何时T是对象类型并且您评估具有返回类型的函数T,您将获得类型的值,T该值是rvalue.另一方面,如果函数具有返回类型T &,则会得到一个类型的值,T它是一个左值(值是绑定到return语句中引用的东西).

  • 注意,只有当`f()`求值为*内置类型*的右值时,`f()= value`才是错误的,否则如果求值为类型的rvalue则可以.(在任何情况下,左值都很好) (3认同)

650*_*502 5

返回参考非常有用。

例如,它就是这样std::map::operator[]做的。我希望你喜欢写作的可能性my_map[key] = new_value;

如果常规(非运算符)函数返回引用,则可以分配给它,并且我看不出有任何理由禁止这样做。

如果您确实需要,可以通过返回 aconst X&或返回来阻止分配。X