问题
Are
std::vector<double> foo ()
{
std::vector<double> t;
...
return t;
}
and
std::vector<double> foo ()
{
std::vector<double> t;
...
return std::move (t);
}
equivalent ?
More precisely, is return x always equivalent to return std::move (x) ?
回答1:
They're not equivalent, and you should always use return t;.
The longer version is that if and only if a return statement is eligible for return value optimization, then the returnee binds to rvalue reference (or colloquially, "the move is implicit").
By spelling out return std::move(t);, however, you actually inhibit return value optimization!
来源:https://stackoverflow.com/questions/15981204/to-return-stdmove-x-or-not