Nic*_*pat 11 c++ pass-by-reference c++11
在我研究boost库的冒险中,我遇到了具有参数的函数签名,这些参数是对对象引用的引用.
例:
void function(int && i);
Run Code Online (Sandbox Code Playgroud)
这样做的目的/好处是什么,而不是简单地引用一个对象?我假设有一个如果它在提升.
Tho*_*mas 18
这不是对参考的参考; 哪有这回事.
你所看到的是一个C++ 0x 右值引用,用双符号表示&&
.这意味着i
该函数的参数是临时的,因此允许该函数破坏其数据而不会在调用代码中引起问题.
例:
void function(int &i); // A
void function(int &&i); // B
int foo();
int main() {
int x = foo();
function(x); // calls A
function(foo()); // calls B, because the return value is a temporary
}
Run Code Online (Sandbox Code Playgroud)
这对于普通int
s 很少有用,但在定义移动构造函数时非常有用.移动构造函数就像一个复制构造函数,除了它可以安全地"窃取"原始对象的内部数据,因为它是一个临时的,在移动构造函数返回后将不复存在.