无法理解移动语义

时间:2014-10-27 15:57:23

标签: c++

在如下的简单示例中:

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;工作?该类没有任何移动支持,这段代码应该做什么?我不明白..

1 个答案:

答案 0 :(得分:1)

从通过解引用序列的迭代器类型获得的类型推导出类型;这是左值引用,MyClass&。通过“参考折叠”规则,尝试推断类型“ rvalue 左值引用的引用”会给出左值引用类型。

因此auto&&推断为MyClass&

如果序列具有给出 rvalue 引用的迭代器类型,那么它将被推导为MyClass&&,如果类支持它,则启用移动语义。