我承认我的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>
。所以我想知道这里使用的是什么,因为我显然遗漏了一些东西。我应该提到我正在使用Xcode 4.4.1(4F1003)附带的Apple LLVM 4.0。
如果这是一个非常愚蠢的问题,请随意嘲笑和嘲笑我,我真的可以使用一些好的头部拍打:)
答案 0 :(得分:4)
引用与容器无关,但与您正在取出的元素无关。在第一种情况下,您正在访问列表中的元素并对其进行修改,在第二种情况下,您将复制该元素,然后更改副本,无论如何都会超出范围。