Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of using a reference to a reference in C++?

In my adventures studying the boost libraries, I've come across function signatures that have parameters which are a reference to a reference to an object.

Example:

void function(int && i);

What is the purpose/benefit of doing it this way rather than simply taking a reference to an object? I assume there is one if it's in boost.

like image 932
Nick Strupat Avatar asked Apr 18 '10 20:04

Nick Strupat


3 Answers

This is not a reference to a reference; there is no such thing.

What you're seeing is a C++0x rvalue reference, denoted by double ampersands, &&. It means that the argument i to the function is a temporary, so the function is allowed to clobber its data without causing problems in the calling code.

Example:

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
}

This rarely useful with plain ints, but very useful when defining move constructors, for example. A move constructor is like a copy constructor, except that it can safely 'steal' the internal data from the original object, because it's a temporary that will cease to exist after the move constructor returns.

like image 56
Thomas Avatar answered Oct 21 '22 17:10

Thomas


That is not a reference to a reference. It is an rvalue reference, which is a new feature supported by the upcoming C++0x standard.

like image 29
James McNellis Avatar answered Oct 21 '22 16:10

James McNellis


What you are looking at is an rvalue-reference. It is a new core language feature of C++0x. See here or less formaly here.

The original proposal can be found here

like image 2
pmr Avatar answered Oct 21 '22 15:10

pmr