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

In C++, is it meaningful to say that a variable has type rvalue reference?

本文关键字:引用 是否 有意义 C++ 变量      更新时间:2023-10-16

我对类似X&& x = static_cast<X&&>(obj_x);的看法是,尽管外观如此,x最终还是一个普通的左值引用。 我最近看到这篇文章,斯科特·迈耶斯坚持认为x将是右值引用类型的左值。这真的有意义,还是没有区别的区别? 具体来说,给定

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

X& x = obj_x;

对于这两种x定义,是否有任何后续代码的行为会有所不同?

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

因此,要回答书面问题,不,没有后续代码会以不同的方式对待x的两个定义(除了,正如cpplearner提到的,decltype())。只有x的定义对引用可以绑定的内容(有助于网络搜索的花哨术语)很重要。

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

我认为是赫伯·萨特(Herb Sutter)的一篇文章让我得到了这个细节,不幸的是我现在找不到它。如果我记错了,可能是斯蒂芬·