C ++ 11是否保证return语句中的局部变量将被移动而不是复制?

时间:2017-02-24 16:22:29

标签: c++ c++11 move-semantics rvalue-reference rvo

#include <vector>

using namespace std;

struct A
{
    A(const vector<int>&) {}
    A(vector<int>&&) {}
};

A f()
{
    vector<int> coll;
    return A{ coll }; // Which constructor of A will be called as per C++11?
}

int main()
{
    f();
}

coll中的xvaluereturn A{ coll };吗?

A(vector<int>&&)返回时是否会调用C ++ 11保证f

1 个答案:

答案 0 :(得分:11)

C ++ 11不允许移动coll。当return执行return <identifier>时,它只允许<identifier>语句中的隐式移动,其中WCF是局部变量的名称。任何比这更复杂的表达都不会隐式移动。

比那些更复杂的表达会经历任何形式的省略。