在我的一個程式中,我使用了一個與此類似的 for each 回圈
for(auto component : components) {
doSomethingWithComponent(component);
}
并且 Visual Studio 抱怨這會導致函式使用比最大值更多的堆疊記憶體,因此我將回圈更改為:
for(int i = 0;i<components.size();i ) {
doSomethingWithComponent(components[i]);
}
警告消失了。這是因為 for each 回圈生成回圈中物件當前迭代的參考/副本嗎?但如果是這樣的話,我不認為具有幾個整數的單個結構會消耗那么多記憶體?發生這種情況是否有原因?
編輯:
components是一個std::vector如果改變任何東西
uj5u.com熱心網友回復:
for(auto component : components) {
這相當于有
auto component=components[i];
在回圈的每次迭代中執行。在回圈的每次迭代中,由容器中的每個值組成一個(大部分是無用的)副本。因此堆疊使用。
這可以通過使用參考來避免:
for(auto &component : components) {
更好的是,如果回圈不應該修改容器的內容:
for(const auto &component : components) {
如果由于錯誤,回圈嘗試修改容器中的值,您的 C 編譯器會很有幫助地抱怨。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335720.html
上一篇:以可理解的形式重寫for回圈
