我很难理解这个概念。我可以将L值和R值作为参数发送到Myclass foo(Myclass)
但是不能从那个函数返回L和R值。只有R值出来。
我想知道为什么会这样?
class Myclass {};
Myclass fooReturnsL(Myclass b)
{
Myclass a;
return a;
}
Myclass fooReturnsR(Myclass b)
{
return Myclass{};
}
int main()
{
Myclass var_Myclass;
Myclass& lref = fooReturnsL(var_Myclass); // sythax error
Myclass& lref = fooReturnsL(Myclass{}); // sythax error
Myclass&& rref = fooReturnsR(var_Myclass); // no error
Myclass&& rref = fooReturnsR(Myclass{}); // no error
}
Myclass fooReturnsL(Myclass b)
是否可以返回L值?
1条答案
按热度按时间y1aodyip1#
此功能
返回具有自动存储持续时间的对象,该对象在退出函数后将不再活动。
所以你不能返回一个不存在的对象的引用。
您可以声明函数,例如
并称之为
如果你试图从一个函数返回一个引用到一个本地对象,并且自动存储持续时间,那么程序行为将是未定义的。
考虑下面的演示程序(假设它将被编译)
程序输出为
正如你所看到的,在函数中声明的对象被破坏了,所以这个引用是一个悬空引用。