7
#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

4

1 回答 1

11

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

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

于 2017-02-24T16:29:57.990 回答