在如下的简单示例中:
struct MyClass {
MyClass() {}
MyClass(const MyClass&) {}
};
int main(){
std::vector<MyClass> objects;
MyClass obj1;
objects.push_back(obj1);
for (auto&& obj: object) {
}
return 0;
}
auto&amp;&amp; amp;工作?该类没有任何移动支持,这段代码应该做什么?我不明白..
答案 0 :(得分:1)
从通过解引用序列的迭代器类型获得的类型推导出类型;这是左值引用,MyClass&
。通过“参考折叠”规则,尝试推断类型“ rvalue 对左值引用的引用”会给出左值引用类型。
因此auto&&
推断为MyClass&
。
如果序列具有给出 rvalue 引用的迭代器类型,那么它将被推导为MyClass&&
,如果类支持它,则启用移动语义。