我想知道如果使用getter在循環中一遍又一遍地獲取相同的屬性有任何性能命中。我應該先將它保存到變量中嗎?請看下面的例子:
C++性能:在循環中使用getter或將其保存到變量首先
直接使用的getter:
for(int i=0; i<1000000; ++i) {
print("Phone = %d\n", myobj->getCity("Foo")->getPhone(i);
}
編輯:
怎麼樣的循環約束?
for(int i=0; i<myobj->totalPhoneNum(); ++i) {...}
或
int totalPhoneNum = myobj->totalPhoneNum();
for(int i=0; i<totalPhoneNum; ++i) {...}
只有當getter的參數依賴於某個循環變量時,才應該在循環中使用getter。在你的情況下它是「不變的」,所以你應該把它保存到一個變量中。它會更好讀。 – dexametason 2012-03-30 09:37:17
剛剛更新了我的問題,那麼循環約束呢?我認爲一行更具可讀性和乾淨性,但總的PhoneNum在這裏是一個常數。哪一個更可取? – Stan 2012-03-30 09:44:44
如果您錯過了我對(現已刪除的)答案的評論,編譯器無法對其進行優化,除非它可以證明'totalPhoneNum()'是常量並且沒有副作用。如果這個功能甚至稍微不重要,那麼你可能最好手動將它拉出來。 – Mysticial 2012-03-30 09:47:39