2010-08-07 5 views
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

Répondre

5

Il est indéfini, parce que dans ce code:

f() = f() + 1; 

il ne se définit pas qui appel à f() a lieu d'abord.

+2

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

+1

@Samuel OK, non spécifié, si vous voulez - je ne peux pas faire avec entrer dans cet argument encore une fois. –

Questions connexes