2011-01-12 49 views
0

如果某個函數是FOR循環中循環測試的一部分,那麼該循環的每次迭代都會調用該函數,或者只是第一次迭代來設置該循環。是每次迭代調用的FOR循環的循環測試部分中的函數嗎?

例如

for (i = 0; i < strlen(someString); i++) { 
    // Do Something 
} 

在循環之前定義一個變量,它的值是字符串長度是更好的形式嗎?

例如

int length = strlen(someString); 

for (i = 0; i < length; i++) { 
    // Do Something 
} 
+1

問問自己,它會評估,如果你有一個函數調用替換您的測試表現:`的for(int i = 0; isDone(我);我++) {...}「我想你知道答案,所以我認爲你知道你的問題的答案。 :) – 2011-01-12 00:07:46

回答

0

這取決於語言(並且如果存在一個方法調用作爲測試的一部分,並且編譯器是否能夠確定是否該方法調用不會改變每次迭代)

例如,在某些情況下,VB .NET評估一次,C#每次評估一次。

有是印證了這最近的SO問題:Why does C# execute Math.Sqrt() more slowly than VB.NET?

0

是的,每次迭代都會檢查for循環中的條件。如果你在那裏調用的函數非常昂貴,那麼你肯定應該把值存儲在一個變量中。但是,如果你有一個短循環,它真的不會有什麼區別。