Bonjour,
encore une énigme comme le c++ en a le secret !
Suivant que je construise une pair (avec make_pair) dans une fonction ou au moment de la passer en paramètre, je n'ai pas la même chose !
Voilà un petit code minimaliste de démonstration :
Ça ressemble au bug du débutant qui renvoie une référence sur un objet de la pile, mais en toute logique non !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #include <iostream> using namespace std ; struct foo { foo ( int xx ) { x = xx ; y = xx+1 ; } pair<const foo&,int> more () const { return make_pair<const foo&,int>( *this,7 ) ; } int x,y ; }; ostream & operator<< ( ostream & o , std::pair<const foo&,int> p ) { o << p.first.x << "," << p.first.y << " + " << p.second ; return o ; } int main () { foo f ( 123 ) ; cout << make_pair<const foo&,int>( f,11 ) << endl ; // affiche bien 123,124 + 11 cout << f.more() << endl ; // affiche n'importe quoi ! (ex : 1231321,6543213 + 7) return 0 ; }
Et si c'est bien ça, comment faire ?
Merci d'avance
PS : Je compile sous Visual Studio 2010... au cas où il faille suspecter quelque lacune d'implémentation des stl.
Partager