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.
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 argumentito the function is a temporary, so the function is allowed to clobber its data without causing problems in the calling code.Example:
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.