【发布时间】:2017-07-16 11:20:15
【问题描述】:
我想知道我的假设是否正确 -> 右值引用就像左值引用一样工作,只是它们只能绑定到右值,因此它们可以用于检测右值。
因此,当用作返回类型时,它就像左值引用一样工作,就像它们返回它们绑定到的实际对象一样。
当用作参数类型时,它们传递值而不进行任何复制。
我看到很多人问通过右值引用和通过值(以及通过左值引用)返回之间的区别是什么,但他们不能都回答说右值引用像左值引用一样工作,所以如果你知道使用左值引用时会发生什么,您可能知道使用右值引用时会发生什么,即您会知道通过右值引用返回返回实际对象,而按值返回返回副本,就像通过左值引用返回和通过返回之间的区别一样价值(大约)?
还是我错了?
【问题讨论】:
-
我认为这是一个很好的摘要。
-
我不清楚您是否意识到将引用(左值或右值)返回到本地(堆栈)变量将返回悬空引用,从而导致未定义的行为。
-
返回 r 值引用可防止 RVO,因此是一种悲观(以及潜在危险)
-
@RichardCritten,我知道 :) 如果本地对象具有自动存储并且会在 return 语句中被销毁,这也很有意义。
-
@RichardHodges 我认为您假设该函数正在返回一个局部变量。如果函数返回对输入或成员变量的引用(如果它是对象方法),则 r 值引用可能是最快的,但仍然存在潜在危险。
标签: c++