c++中参考的参考

Reference of Reference in C++

本文关键字:参考 c++      更新时间:2023-10-16

我每隔一段时间就会看到StackOverflow上的代码,询问一些涉及函数的重载歧义,如:

void foo(int&& param);

我的问题是:为什么会出现这种情况?或者更确切地说,你什么时候会有"对引用的引用"?这和普通的参考文献有什么不同?我从来没有在现实世界的代码中遇到过这个,所以我很好奇什么样的代码需要这个

这是一个右值引用,Bjarne在这里描述了它。

无耻的抄袭("引用"):

右值引用

右值引用是复合类型非常类似于c++的传统参考。为了更好地区分这些两种类型,我们指的是传统的作为左值引用的c++引用。当使用术语引用时,它指两种参考文献:左值引用和右值引用

左值引用由放置&

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

右值引用由放置&&在某种类型之后。

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

右值引用的行为类似于一个左值引用,除非它可以绑定到一个临时值(右值),而你不能绑定(non const)左值引用右值。

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

这不是对引用的引用:这样的事情是不存在的。

是一个右值引用, c++ 11中添加的新特性。

这是一个右值引用。请注意,用于布尔与和右值引用的&&标记,以及用于位与和普通引用的&标记,就语言而言是不同的"单词"。

右值引用(通常)绑定到一个对象,该对象在右值引用结束后可能处于不确定状态,可能是因为该对象随后将被销毁。

简单地说,将变量绑定到右值引用通常是你对它做的最后一件事。

与常规引用不同,与const &引用类似,右值引用可以绑定到右值(不能直接取其地址的表达式)。与常规引用类似,但与const &引用不同,右值引用可以用来修改它的对象。