4

我承认我的 C++ 技能有点生疏,我正在为即将开始的新项目投入 C++11。我刚刚发现这种令人困惑的行为,如果我写

void MyClass::update() {
    for(SomeClass &i : _list) {
        i.doStuff();
    }
}

或者

void MyClass::update() {
    for(SomeClass i : _list) {
        i.doStuff();
    }
}

它的工作原理似乎完全相同,_list只是一个std::list<SomeClass>. 所以我想知道这里的 ref 有什么用,因为我显然遗漏了一些东西。我应该提到我正在使用 Xcode 4.4.1 (4F1003) 附带的 Apple LLVM 4.0。

拜托,如果这是一个非常愚蠢的问题,请随意嘲笑和取笑我,我真的可以用一些好的 ol' head slapping :)

4

1 回答 1

4

引用与容器无关,而是与您从中取出的元素有关。在第一种情况下,您正在访问列表中的元素并对其进行修改,在第二种情况下,您制作元素的副本然后更改副本,无论如何这将超出范围。

于 2012-09-16T08:34:57.860 回答