Recentemente ho visto un pezzo di codice in comp.lang.C++ moderato restituendo un riferimento di un intero statico da una funzione. Il codice è stato qualcosa di simileOttimizzazione prematura o sono pazzo?
int& f()
{
static int x;
x++;
return x;
}
int main()
{
f()+=1; //A
f()=f()+1; //B
std::cout<<f();
}
Quando il debug l'applicazione che utilizza il mio fresco debugger di Visual Studio che ho visto una sola chiamata alla dichiarazione A e indovinate un po 'sono rimasto scioccato. Ho sempre pensato che i+=1
fosse uguale a i=i+1
quindi f()+=1
sarebbe uguale a f()=f()+1
e vedrei due chiamate allo f()
, ma ne ho visto solo uno. Che diamine è questo? Sono pazzo o il mio debugger è impazzito o si tratta di un risultato di ottimizzazione prematura?
'static int x' non è inizializzato. –
Questo non è correlato alla domanda, però. – BjoernD
@Rambo: Penso che tu stia parlando di questo thread: http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/566222d9b756ecc5/3279970278f46946 –