2010-04-26 78 views
1

瑣碎的問題:爲什麼這是不允許的:關於重新定義

int a = 0; 
int a = 0; 

但這是:

for (int i = 0; i < 2; ++i) 
{ 
    int a = 0; 
} 

據我所知代碼在for循環將whitout真正走出去的執行兩次它的範圍,所以它也應該是一個錯誤來定義兩次。
期待您的回答
謝謝。

回答

8

for循環中有一個單一的定義。變量被創建,使用,然後在關閉大括號中銷燬並在下一次循環迭代中重新創建。有一個定義的變量。

這在某種程度上類似於函數中定義的變量。該函數可以被多次調用,但變量是一個。實際上,對於函數,函數可以遞歸調用,並且會有多個變量存在,但是對於函數的每次執行,都有一個定義的變量。

編輯:請注意,正如@xtofl正確指出的那樣,i的生命週期是整個for循環,而a的生命週期是大括號中的塊:for循環的單個迭代。

+2

注意:'i'和'a'之間的區別是:''''在'for'構造的整個生命週期中'生存'(之後是不可見的),而'a'的生命期是有限的到循環體的一次執行! – xtofl 2010-04-26 10:27:39

+0

@xtofl:好的一點,我已經編輯了這個問題,都是爲了添加您的評論,並嘗試簡化與函數變量的相似性,希望這樣可以減少混淆。 – 2010-04-26 10:59:45

2

在第二種情況下,變量a僅在for循環中作用域。你無法從外部訪問它。並且它會再次爲你的循環的每一次迭代創建 - 就像你爲每次迭代獲得一個新的a。例如,不可能在一個集合中將值分配給a,並且在以後的迭代中訪問該分配的值。

您應該閱讀約variable scopes以獲取有關此主題的更多信息。因爲它在編程中非常重要。

3

該代碼是兩次執行
但編譯器只會讀取'a'變量的定義一次。