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?