On Tue, May 11, 2010 at 12:48 PM, John Dlugosz
If you want or need a primer on the subject, please look at the working draft for C++1x. This linked site has also been shown to be quite useful in describing move usefulness:
Want Speed? Pass by Value.: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
Move It With Rvalue References: http://cpp-next.com/archive/2009/09/move-it-with-rvalue-references/
This article suggests passing by value and letting the compiler make (or omit) the copy. It also has specific advice on return value behavior: return a local variable, but not a formal parameter (even if you have to swap them).
But, I recall reading that Boost has conditional code with a lengthy explanation about what optimizes for one compiler is bad for another, and vice versa, and concerned passing const ref (or not). Is this specific advice more up-to-date with current compilers, or "just his"?
I am pretty sure that is rather up-to-date with GCC/VS (even slightly older versions), unsure about others. Boost.Move is more general though, used for construction of objects, moving values (excellent for sorting as the articles demonstrate) and others. RVO and Move'ing combined provides for quite a few efficiencies, and for compilers that do not support RVO, more liberal use of Boost.Move could emulate it rather well.