c++中参考的参考
Reference of Reference in C++
我每隔一段时间就会看到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 &
引用不同,右值引用可以用来修改它的对象。
相关文章:
- C++错误消息*成员参考.**初学者*
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 参考资源文件VC++中的$(SolutionDir)
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 为什么在运算符重载时需要参考?
- 使 \page 和 \subpage 参考 doxygen 中的方法文档
- std::shared_ptr 自定义参考计数器
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 避免在基于反向范围的for循环实现中悬挂参考
- 通用参考 l 值不复制对象
- 标准::enable_if和通用参考的使用差异
- 标准::积累参考?
- C++丢失了参考
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 矢量的通用参考
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- C++17 和静态临时生存期的参考扩展
- C++ 参考:这两个语句有什么区别?
- 如何理解 C++17 标准参考中的 [intro.object]/3? N4659 的
- 是否有必要使用 std::move?这不是已经是一个右值参考了吗?