我偶尔会在StackOverflow上看到代码,询问一些涉及函数的过载歧义:
void foo(int&& param);
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么会出现这种情况?或者更确切地说,你何时会"引用参考"?这与普通的旧参考有什么不同?我从来没有在现实世界的代码中遇到过这个问题,所以我很想知道需要什么样的代码.
Sku*_*del 47
这是一个右值参考,Bjarne 在这里描述.
无耻复制("引用"):
右值参考
右值引用是一种非常类似于C++传统引用的复合类型.为了更好地区分这两种类型,我们将传统的C++引用称为左值引用.当使用术语引用时,它指的是两种引用:左值引用和右值引用.
通过在某种类型之后放置&来形成左值引用.
Run Code Online (Sandbox Code Playgroud)A a; A& a_ref1 = a; // an lvalue reference通过在某种类型之后放置&&来形成右值引用.
Run Code Online (Sandbox Code Playgroud)A a; A&& a_ref2 = a; // an rvalue reference右值引用的行为与左值引用的行为类似,只是它可以绑定到临时值(右值),而不能将(非常量)左值引用绑定到右值.
Run Code Online (Sandbox Code Playgroud)A& a_ref3 = A(); // Error! A&& a_ref4 = A(); // Ok
这是一个右值参考.请注意,&&用于布尔AND和rvalue引用的&标记以及用于按位AND和普通引用的标记,就语言而言是不同的"单词".
右值引用(通常)绑定到一个对象,该对象在rvalue引用完成后可能处于不确定状态,可能是因为该对象将被销毁.
简单地说,将变量绑定到右值引用通常是您最后做的事情.
与常规引用不同,但是像const &引用一样,rvalue引用可以绑定到rvalue(不能直接获取地址的表达式).像常规引用一样,但与引用不同const &,可以使用右值引用来修改其对象.
| 归档时间: |
|
| 查看次数: |
25765 次 |
| 最近记录: |