J'ai récemment vu un morceau de code à comp.lang.C++ modéré retournant une référence d'un entier statique à partir d'une fonction. Le code était quelque chose comme çaOptimisation prématurée ou suis-je folle?
int& f()
{
static int x;
x++;
return x;
}
int main()
{
f()+=1; //A
f()=f()+1; //B
std::cout<<f();
}
Quand je débogués l'application en utilisant mon sang-froid débogueur Visual Studio, j'ai vu un seul appel à la déclaration A et devinez ce que j'ai été choqué. J'ai toujours pensé que i+=1
était égal à i=i+1
alors f()+=1
serait égal à f()=f()+1
et je verrais deux appels à f()
, mais j'ai vu un seul. C'est quoi ce truc? Suis-je fou ou mon débogueur est-il devenu fou ou est-ce le résultat d'une optimisation prématurée?
'static int x' n'est pas initialisé. –
Ce n'est pas lié à la question, cependant. – BjoernD
@Rambo: Je pense que vous parlez de ce fil: http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/566222d9b756ecc5/3279970278f46946 –