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分配给函数.理想情况下,编译器应该显示像左值所需的错误但在上面的情况下程序工作正常.为什么会这样?
说"一个函数返回一些东西"是松散而草率的语言.如果你知道如何使用它,那么它可以作为速记,但在这种情况下你会感到困惑.
考虑它的更正确的方法是评估函数调用表达式.这样做会给你一个价值.值是rvalue或左值(模数细节).
何时T是对象类型并且您评估具有返回类型的函数T,您将获得类型的值,T该值是rvalue.另一方面,如果函数具有返回类型T &,则会得到一个类型的值,T它是一个左值(值是绑定到return语句中引用的东西).
返回参考非常有用。
例如,它就是这样std::map::operator[]做的。我希望你喜欢写作的可能性my_map[key] = new_value;。
如果常规(非运算符)函数返回引用,则可以分配给它,并且我看不出有任何理由禁止这样做。
如果您确实需要,可以通过返回 aconst X&或返回来阻止分配。X