我在Visual Studio 2010中做C++,發現一些奇怪的行爲。爲了使長話短說,我發現,這不會編譯:C++重新聲明循環計數變量不一致的行爲?
for (int i = 0; i < 10; i++)
{
int i = 11;
}
這似乎是正確的,因爲變量i在已經申報循環頭。現在,如果我在重新聲明i之前插入另一個for循環,那麼編譯器,intellisense等會突然顯示代碼是正確的 - 沒有給出真正的警告(嘗試過警告級別3和4(/ W3和/ W4))。那麼,這樣做實際上將編譯和運行:
for (int i = 0; i < 10; i++)
{
for(int j = 0; j < 5; j++)
{
}
int i = 11;
}
就個人而言,我覺得很奇怪,insering另一個for循環的合法化,否則相同的代碼的情況。 任何一種精神都能告訴我我在這裏忽略了什麼?
在此先感謝!
編輯: 哇,謝謝大家的所有答覆和演示 - 你真棒! :) 這個揭露bug的例子確實讓我想起了,我只是假設MS現在已經注意到了這樣的事情並修復了它......至少在VS2013中。
試圖改變建議的優化設置,但它沒有任何區別。
謝謝大家!
信用爲演示:@馬克·加西亞
它是編譯器還是智能感知? –
[第一段代碼](http://rextester.com/ORRMS33867),[第二段代碼](http://rextester.com/ESBFG91953)。 –
@LuchianGrigore編譯器也是如此。 VS2012也拒絕第一個片段並接受第二個片段。 – Mysticial