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!