在C ++中使用引用引用的目的是什么?

时间:2010-04-18 20:13:44

标签: c++ c++11 pass-by-reference

在我研究升级库的冒险中,我遇到了具有参数的函数签名,这些参数是对对象引用的引用。

示例:

void function(int && i);

这样做的目的/好处是什么,而不是简单地引用一个对象?我假设有一个,如果它在提升。

3 个答案:

答案 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)

您所看到的是右值参考。它是C ++ 0x的新核心语言特性。 请参阅here或更少结构here

可以找到原始提案here