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

好久不见. 提交于 2019-12-21 07:30:10

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!