我在編碼時遇到了這種奇怪的行爲。所以我在這裏問。變量聲明中'for'循環的範圍
聲明變量時for
循環的範圍是什麼?
此代碼編譯細
for (int i = 0; i < 10; i++) { }
for (int i = 0; i < 10; i++) { }
這意味着二者int i
不在同一範圍內。
但是這段代碼不能編譯。
for (int i = 0; i < 10; i++) { }
int i; // Conflicts with both first loop and second one.
for (int i = 0; i < 10; i++) { }
這意味着在循環的中間int i
具有第一環路和第二環路的相同範圍。
但int i
如何能在兩個for
循環有不同的範圍,但與中間相同的範圍int i
?因爲目前我看到他們在同一水平。
我知道第二個代碼不能編譯。爲什麼第一個代碼會在範圍有問題時編譯呢?這是編譯器內部的異常嗎?
它不在相同的範圍內,而是在嵌套的範圍內,這也是禁止的。看看這個問題的答案類似的問題:https://stackoverflow.com/questions/6156449/why-cant-a-duplicate-variable-name-be-declared-in-a-nested-local-範圍 – Dirk
有趣的是,for(int i = ...){} {int i; } for(int i = ...){}'(note inner {}')does complie。 –
@DmitryBychenko:這是因爲我只存在於大括號(for循環之間)所定義的塊內。 – Piters