【发布时间】:2011-02-09 11:08:47
【问题描述】:
在我研究 boost 库的冒险中,我遇到了函数签名,这些函数签名具有对对象引用的引用。
例子:
void function(int && i);
这样做的目的/好处是什么,而不是简单地引用一个对象?我假设有一个,如果它在提升中。
【问题讨论】:
标签: c++ c++11 pass-by-reference
在我研究 boost 库的冒险中,我遇到了函数签名,这些函数签名具有对对象引用的引用。
例子:
void function(int && i);
这样做的目的/好处是什么,而不是简单地引用一个对象?我假设有一个,如果它在提升中。
【问题讨论】:
标签: c++ c++11 pass-by-reference
这不是对引用的引用;没有这样的东西。
您看到的是 C++0x rvalue reference,用双 & 符号表示,&&。这意味着该函数的参数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
}
这对于普通的ints 很少有用,但在定义移动构造函数时非常有用,例如。移动构造函数类似于复制构造函数,只是它可以安全地从原始对象中“窃取”内部数据,因为它是一个临时的,在移动构造函数返回后将不复存在。
【讨论】:
这不是对引用的引用。它是一个右值引用,是即将到来的 C++0x 标准支持的新特性。
【讨论】: