Sto facendo C++ in Visual Studio 2010 e ho riscontrato un comportamento strano. Per fare una lunga storia breve, ho scoperto che questo non compilerà:C++ redeclaration del comportamento inconsistente variabile del conteggio dei cicli?
for (int i = 0; i < 10; i++)
{
int i = 11;
}
Questo sembra corretto, dal momento che la variabile i è già dichiarato nel ciclo per l'intestazione.
Ora, tuttavia, se inserisco un altro ciclo prima della re-dichiarazione di i, quindi all'improvviso il compilatore, intellisense ecc. Il codice è corretto, non fornisce avvisi reali (tentativi di livello 3 e 4 (/ W3 e/w4)). Quindi, facendo questo sarà effettivamente compilare ed eseguire:
for (int i = 0; i < 10; i++)
{
for(int j = 0; j < 5; j++)
{
}
int i = 11;
}
Personalmente, trovo strano che insering un altro per-loop legittima l'altrimenti stesso scenario codice. Qualsiasi spirito gentile in grado di dirmi cosa sto trascurando qui?
Grazie in anticipo!
MODIFICA: Wow, grazie a tutti per tutte le risposte e le dimostrazioni - Sei fantastico! :) Questo esempio che ha esposto un bug mi è passato per la testa, ho appena pensato che MS avrebbe notato una cosa del genere e l'ha risolto ... almeno in VS2013.
Provato a modificare le impostazioni di ottimizzazione come suggerito, ma non ha fatto alcuna differenza.
Grazie a tutti!
credito per le demo: @ Marco Garcia
È il compilatore o l'intellisense? –
[Prima parte di codice] (http://rextester.com/ORRMS33867), [seconda parte di codice] (http://rextester.com/ESBFG91953). –
@LuchianGrigore Compiler pure. VS2012 rifiuta anche il primo snippet e accetta il secondo. – Mysticial