在我研究升级库的冒险中,我遇到了具有参数的函数签名,这些参数是对对象引用的引用。
示例:
void function(int && i);
这样做的目的/好处是什么,而不是简单地引用一个对象?我假设有一个,如果它在提升。
答案 0 :(得分:18)
这不是对参考的引用;没有这样的事情。
您所看到的是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
}
这对于普通int
很少有用,但在定义移动构造函数时非常有用。移动构造函数就像一个复制构造函数,除了它可以安全地“窃取”原始对象的内部数据,因为它是一个临时的,在移动构造函数返回后将不复存在。
答案 1 :(得分:3)
这不是对参考的引用。它是一个右值引用,是即将推出的C ++ 0x标准支持的新功能。
答案 2 :(得分:2)