Maison >développement back-end >C++ >Combien de temps les arguments de fonction temporaires durent-ils en C ?

Combien de temps les arguments de fonction temporaires durent-ils en C ?

DDD
DDDoriginal
2024-12-27 07:06:17952parcourir

How Long Do Temporary Function Arguments Live in C  ?

Comprendre la durée de vie des arguments de fonction temporaires

Lors de l'utilisation d'objets temporaires instanciés comme arguments de fonction, comme illustré ci-dessous :

class MyClass
{
  MyClass(int a);
};

myFunction(MyClass(42));

Il est crucial de comprendre le comportement de leur destruction. La norme C fournit un aperçu du timing de leurs destructeurs.

Moment de destruction des arguments temporaires

Les objets temporaires atteignent leur fin à la fin de l'expression complète qu'ils habitent. Une expression complète désigne une expression autonome et non imbriquée dans une autre. Généralement, cela correspond au point-virgule (ou à la parenthèse fermante pour les instructions conditionnelles, loop et switch) désignant l'achèvement de l'instruction. Dans l'exemple donné, l'expression complète se termine par l'appel de fonction.

Prolongation de la durée de vie temporaire

Il est à noter que la durée de vie des temporaires peut être prolongée en les référençant comme un référence constante. Cette stratégie prolonge leur durée de vie pour correspondre à celle de la référence :

MyClass getMyClass();

{
  const MyClass& r = getMyClass(); // full expression ends here
  ...
} // object returned by getMyClass() is destroyed here

L'utilisation de cette technique peut optimiser les performances en évitant un invocation inutile du constructeur de copie par rapport à l'utilisation de MyClass obj = getMyClass();. Cependant, sa prévalence est quelque peu faible.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn