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

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)

这对于普通ints 很少有用,但在定义移动构造函数时非常有用.移动构造函数就像一个复制构造函数,除了它可以安全地"窃取"原始对象的内部数据,因为它是一个临时的,在移动构造函数返回后将不复存在.

  • @Silver:它将利用某些编译器的功能.有些编译器支持C++ 0x(有点),如果Boost想要检测并使用它,它会. (2认同)