for (size_t i = 0; i < myClassObject.Method(); ++i)
some work;
我想知道如果編譯器將優化出來的方法調用,並把它變成這樣?
size_t result = myClassObject.Method();
for (size_t i = 0; i < result; ++i
some work;
如果它是一個函數調用,它會影響嗎?我擔心的是,我可能會對該方法進行1000次不需要的調用,但我更願意在條件中使用方法調用編寫它。
類似的問題在這裏http://stackoverflow.com/questions/5607762/what-does-code-motion-mean-for-loop-invariant-code-motion – srikanta
無所謂如果它是一個方法調用或純C風格的函數調用中,允許編譯器優化它的要求是相同的。 – Mat
這是受廣泛實施的環路提升優化,又稱「環路不變代碼運動」。所以,是的。 http://en.wikipedia.org/wiki/Loop-invariant_code_motion –