To return std::move (x) or not?

2019-04-04 15:18发布

问题:

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!