C 中引用的引用

新手上路,请多包涵

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

 void foo(int&& param);

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

原文由 user541686 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 430
2 个回答

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

无耻抄袭(“引用”):

右值引用

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

通过在某种类型之后放置 & 来形成左值引用。

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

通过在某种类型之后放置 && 来形成右值引用。

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

右值引用的行为类似于左值引用,只是它可以绑定到临时(右值),而您不能将(非 const)左值引用绑定到右值。

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

原文由 Skurmedel 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 James McNellis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏