在C ++中,说变量具有类型右值引用是否有意义?

时间:2016-07-16 05:24:28

标签: c++ rvalue-reference

我对openssh-6.6-fips.patch之类的思考方式是,尽管如此,X&& x = static_cast<X&&>(obj_x);最终成为一个普通的左值引用。我最近遇到this article,其中Scott Meyers坚持认为x将是左值类型参考值的左值。这真的有意义,还是没有区别的区别?具体来说,给出

x

X&& x = static_cast<X&&>(obj_x)

是否有任何后续代码对X& x = obj_x; 的这两个定义的行为会有所不同?

1 个答案:

答案 0 :(得分:1)

重要的区别在于R值引用是命名还是未命名(返回值)。

所以,要回答问题,不要,没有后续代码会不同地处理x的两个定义(除了cpplearner提到,decltype())。只有x的定义才能引用绑定到(这将有助于网络搜索的奇特术语)。

任何具有名称的内容都可以再次引用,因此它会被视为l值,以便绑定到后续引用。为什么?因为r值引用的主要原因是允许某些内容移动。从它移开后,它已不再可行。你所能做的就是销毁它或分配它。如果这个东西没有名字就没什么大不了的,但是如果它有一个名字,很容易意外再次使用它。这就是为什么你需要调用std :: move(mything)来移出我的东西[除了在某些返回的情况下]。

我认为这是Herb Sutter的一篇文章让我得到了这个细节,遗憾的是我现在找不到它。如果我记错了,可能是Stephan T Lavavej。