Maison > Article > développement back-end > ## La liaison d'une référence Const à un sous-objet d'un temporaire prolonge-t-elle sa durée de vie ?
Considérez le code suivant :
<code class="cpp">#include <stdio.h> struct P2d { double x, y; P2d(double x, double y) : x(x), y(y) {} ~P2d() { printf("Destructor called\n"); } }; P2d center() { return P2d(10, 10); } int main(int argc, const char *argv[]) { const double& x = center().x; printf("x = %.18g\n", x); return 0; }</code>
Dans cet exemple, center() renvoie un objet P2d temporaire. La question se pose : quelle est la durée de vie de cet objet temporaire ?
Différents compilateurs présentent des comportements différents :
Selon le standard C, lier une référence à un sous-objet d'un temporaire ne prolonge pas la durée de vie du temporaire . Cependant, ceci est couvert par le CWG 1651, qui propose un changement pour prolonger la durée de vie dans de tels cas.
Le statu quo est que seules les valeurs sont traitées comme faisant référence à des valeurs temporaires. Cependant, les expressions d'accès aux membres, comme center().x, sont considérées comme des valeurs à la fois par g et par clang .
La résolution à venir clarifiera que les expressions d'accès des membres aboutissent à des expressions temporaires et que la liaison d'une référence à ces expressions prolonge la durée de vie de l'objet temporaire correspondant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!