#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
中的xvalue
是return A{ coll };
吗?
A(vector<int>&&)
返回时是否会调用C ++ 11保证f
答案 0 :(得分:11)
C ++ 11不允许移动coll
。当return
执行return <identifier>
时,它只允许<identifier>
语句中的隐式移动,其中WCF
是局部变量的名称。任何比这更复杂的表达都不会隐式移动。
比那些更复杂的表达不会经历任何形式的省略。