Nick Strupat
Nick Strupat

Reputation: 5063

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.

Upvotes: 11

Views: 414

Answers (3)

Thomas
Thomas

Reputation: 181785

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.

Upvotes: 18

pmr
pmr

Reputation: 59811

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

Upvotes: 2

James McNellis
James McNellis

Reputation: 355079

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.

Upvotes: 3

Related Questions