Bonjour,
est il correcte de référencer le retour d'un fonction pour l'utiliser plus tard?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 A MafonctionQuiRetourneA() { . . . } . . . A & maref = MafonctionQuiRetourneA(); maref.QuelqueChose();
Version imprimable
Bonjour,
est il correcte de référencer le retour d'un fonction pour l'utiliser plus tard?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 A MafonctionQuiRetourneA() { . . . } . . . A & maref = MafonctionQuiRetourneA(); maref.QuelqueChose();
Oui, la duree de vie d'un temporaire lie a une reference est etendue pour correspondre a la duree de vie de la reference.
Attention cependant a ne pas prendre une reference vers un sous-objet d'un object temporaire: p.e.:
Le temporaire retourne par f est bien detruit a la fin de l'expression et donc la reference n'est plus valable.Code:
1
2
3
4
5 struct S { int x, y; }; S f(); ... int& i = f().x;
Quoi? La possibilite de lie une reference a un temporaire? De memoire, c'est comme ca depuis au moins l'ARM (1991).
Le fait que les temporaires sont detruits a la fin de l'expression les generant? Non, c'est plus recent et la pratique variait avant qu'on definisse clairement le comportement. D'ailleurs le compilateur de Sun continue par defaut (il y a une option pour avoir le comportement standard) a faire vivre les temporaires jusqu'a la fin du bloc.
Merci
C'est bien ce que j'avais compris alors