3
#include<iostream>
int& f(){
static int x = 0;
x++;
return x;
}
int main(){
f() += 1; //A
f() = f() + 1; //B
std::cout << f();
}
Le code ci-dessus sort 6 sur gcc et 5 sur MSVC. Maintenant, quand je modifie A
et B
à f()=f()
je reçois 5 sur les deux compilateurs. Quel est le problème ici? Le comportement est-il indéfini. Si oui, pourquoi?Renvoyer une référence à partir d'une fonction et la modifier
Ne pensez-vous pas que ce comportement n'a pas de signification? La valeur de x est-elle modifiée plus d'une fois entre deux points de séquence même si nous avons un appel de fonction qui est lui-même un point de séquence? – Samuel
@Samuel OK, non spécifié, si vous voulez - je ne peux pas faire avec entrer dans cet argument encore une fois. –