有什麼不同代碼明智之間:的(...)循環索引聲明風格
int i = 0;
for (i = 0 ; i < n ; i++)
{
}
和
也許,如果有更多的循環,它們都使用相同的索引?
而且,是版本相當於先:
int i = 0;
for (; i < n ; i++)
{
}
我所知道的優化應該是足夠聰明,至少產生相同的代碼,但理論上有什麼區別?
有什麼不同代碼明智之間:的(...)循環索引聲明風格
int i = 0;
for (i = 0 ; i < n ; i++)
{
}
和
也許,如果有更多的循環,它們都使用相同的索引?
而且,是版本相當於先:
int i = 0;
for (; i < n ; i++)
{
}
我所知道的優化應該是足夠聰明,至少產生相同的代碼,但理論上有什麼區別?
好吧,我想出了爲什麼我們在循環外使用索引聲明。
顯然,我們的Solaris編譯器會給出一個編譯錯誤,像代碼:
for (int i = 0 ; ;);
for (int i = 0 ; ;);
的錯誤是:
Error: multiple declaration for i.
在第一種和第三種情況下,int i
的範圍超出了for循環。在第二種情況下,作用域爲for
循環,如果您想稍後使用它,則必須重新聲明i
。
是的,只有在前兩行之間沒有放置任何東西時,第一個版本才相當於第三個版本。如果您在兩者之間添加一些代碼,則所有投注都將關閉。
'i'的範圍不同。 在情況1中,您可以在循環外訪問它,而在情況2中,您只能在循環內訪問它。在退出循環之後,它將不再存在。
第一和第三版本是幾乎相同;與i = 0
爲分配在第1版和初始化在第3版中的小差異。 (對於用戶定義的數據類型,有時會產生很大的差異)。
第二個版本功能相同;然而i
是作用域在for
循環內。因此{}
完成後無法訪問i
。我更喜歡這個版本。
第一和第三在所有方面都是相同的。
其次在功能上是相同的,但僅限於for循環中的i
範圍(使用範圍)。
第一個版本和第三個版本是一樣的。
第二個版本與其他版本不同:我只活在循環範圍內。