c++11 Return value optimization or move?

c++, c++11, move-semantics, return-value-optimization

Solution

Use exclusively the first method:

Foo f()
{
  Foo result;
  mangle(result);
  return result;
}

This will already allow the use of the move constructor, if one is available. In fact, a local variable can bind to an rvalue reference in a `return` statement precisely when copy elision is allowed.

Your second version actively prohibits copy elision. The first version is universally better.

Problem

I don't understand when I should use `std::move` and when I should let the compiler optimize... for example: ``` using SerialBuffer = vector< unsigned char >; // let compiler optimize it SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( begin( buffer ), end( buffer ) ); // Return Value Optimization return buffer; } // explicit move SerialBuffer read( size_t size ) const { SerialBuffer buffer( size ); read( begin( buffer ), end( buffer ) ); return move( buffer ); } ``` Which should I use?

Original source

Related problems