Maison > développement back-end > C++ > le corps du texte

Le retour d'une variable locale en C 17 détruit-il l'original ?

DDD
Libérer: 2024-11-11 11:22:03
original
860 Les gens l'ont consulté

Does Returning a Local Variable in C  17 Destroy the Original?

Le retour d'une variable locale détruit-il l'original ?

À partir de C 17, le fait de renvoyer une variable locale renvoie une copie ou détruit l'original dépend si l'optimisation est activée.

Avec optimisation (NRVO)

Avec l'optimisation activée (appelée optimisation de la valeur de retour nommée ou NRVO), le compilateur peut directement construire l'objet renvoyé dans le stockage où il serait copié/déplacé. Cela signifie que la variable locale d'origine n'est pas détruite.

Sans optimisation

Si l'optimisation est désactivée (en utilisant -fno-elide-constructors), NRVO est désactivé. La variable locale sera construite normalement, une copie ou un déplacement sera effectué et l'original sera détruit.

Exemple

Considérez le code suivant :

class test {
public:
    test(int p) { cout << "Constructor: " << this << endl; }
    test(test&& c) noexcept { cout << "Move Constructor: " << this << endl; }
    ~test() { cout << "Destructor: " << this << endl; }
};

test function() {
    test i(8);
    return i;
}
Copier après la connexion

Sortie avec optimisation (NRVO) :

Constructor: 0x7fff78e42887
Destructor: 0x7fff78e42887
Copier après la connexion

Sortie sans optimisation :

Constructor: 0x7ffda9d94fe7
Move Constructor: 0x7ffda9d95007
Destructor: 0x7ffda9d94fe7
Destructor: 0x7ffda9d95007
Copier après la connexion

Dans le cas optimisé, un seul objet est construit et détruit. Dans le cas non optimisé, deux objets sont construits et détruits en raison de la création d'une copie temporaire.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal