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)
?
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!