2014-04-30 51 views
-2

您可能對該主題感到困惑。所以讓我解釋一下。「For」循環只是一個簡單的方法來使用帶有一個計數變量的「While循環」?

在大多數計算語言中,我們有for和while循環。但在我的例子中,我將在c#中聲明循環。

當你decalre for循環,while循環像這樣。

1.適用於環

for(i=0;i<10;i++) 
    { 
    //do something 
    } 

2.當循環

int i=0; 
while(i<10) 
    { 
    //do something 
    i++; 
    } 

從2個環路。當涉及到編譯器時,它們是否編譯相同的東西?(除了在while循環之外聲明的int i)。如果它們不是,哪個更好或更高效?

在此先感謝

+4

我不知道。 while循環是使用goto的簡單方法嗎? –

+0

這是不可能的,因爲唯一理論上可靠的數據是逐個測試編譯器(及其選項)。但實際上,情況將會如此。 – Jon

+0

你可以檢查他們編譯到使用'ildasm'。請注意,如果您在循環體中的任何地方都有「繼續」,則差異變得顯着。 –

回答

0

簡單回答你的問題是「是的,他們將編譯到相同的代碼。」有時。這將取決於語言和編譯器。就C#而言,生成的代碼中的任何差異都非常小,以至於在運行時間方面無關緊要。

任何for循環都可以重新編碼爲while,反之亦然。例如,這while循環:

bool done = false; 
while (!done) 
{ 
    // do stuff 
} 

可以重新編碼爲for

for (bool done = false; !done;) 
{ 
    // do stuff 
} 

forwhile只是抽象。有時,我們更容易考慮逐步瀏覽列表,這是for聲明的基礎(雖然當然不是唯一的用途)。其他時候,我們想要做一些事情,而一些條件仍然如此 - 因此我們使用while。有些語言有until(或者在C中爲do ... while),這會使條件結束。

這些都是構建解決方案的不同方式。三種類型的圈可以互換,通常難度很小,但通常會發現其中一種比另外兩種更清楚地表達了你的意圖。

0

對於兩個代碼部分,生成的中間語言可能看起來非常相似。對於被設計爲遍歷索引對象,所以如果你想要做到這一點,然後使用它。但你仍然可以在同一時間做同樣的事情。

從表現的角度來看沒有區別。此外,如果您在如此低的級別上受到性能影響,則排除了其他任何主要性能問題,這反過來又提供了有關IL如何在此工作的信息。

相關問題