在C ++中引用参考

我每隔一段时间就看到StackOverflow上的代码,询问一些涉及如下函数的过度含糊:

void foo(int&& param); 

我的问题是:为什么这甚至出现? 或者说,你什么时候会“参考一个参考”? 这与普通的老参考有什么不同? 我从来没有在现实世界的代码中遇到这个问题,所以我很好奇哪种types的代码需要这个。

这是一个右值参考,Bjarne 在这里描述。

无耻复制(“引用”):

右值引用

右值引用是一个非常类似于C ++传统引用的复合types。 为了更好地区分这两种types,我们将传统的C ++引用作为左值引用。 当使用术语引用时,它指的是两种引用:左值引用和右值引用。

一个左值引用是通过放置一个&后一些types。

 A a; A& a_ref1 = a; // an lvalue reference 

右值引用是通过在某种types之后放置&&而形成的。

 A a; A&& a_ref2 = a; // an rvalue reference 

一个右值引用的行为就像一个左值引用,只不过它可以绑定到一个临时值(右值),而不能将一个(非常量)左值引用绑定到右值。

 A& a_ref3 = A(); // Error! A&& a_ref4 = A(); // Ok 

这不是一个参考的参考 :这样的事情不存在。

这是一个右值引用 ,在即将被标准化的C ++ 11中增加了一个新特性。

这是一个右值引用。 请注意,用于布尔AND和右值引用的&&标记,以及用于按位AND和正常引用的&标记,只要语言可以识别,就是不同的“字”。

右值引用(通常)绑定到一个对象,在右值引用完成之后,该对象可能会处于不确定状态,这大概是因为该对象将被销毁。

简单地说,将一个variables绑定到右值引用通常是最后一件事情。

与常规引用不同,但像const &引用一样,右值引用可以绑定到右值(不能直接获取地址的expression式)。 像常规引用一样,但不像const & reference,可以使用右值引用来修改其对象。