2012-09-16 63 views
4

我承認我的C++技能有點生疏,我正在深入研究C++ 11以開始一個新的項目。我剛剛發現了這個令人困惑的行爲,其中,如果我寫在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。

請隨意嘲弄和取笑我,如果這是一個愚蠢的ourageously問題,我真的可以使用一些好的醇」頭打耳光:)

回答

4

參考無關與容器,但與你正在採取的元素。在第一種情況下,您正在訪問列表中的元素並對其進行修改,在第二種情況下,您將複製該元素,然後更改副本,該副本無論如何都會超出範圍。