Maison > développement back-end > C++ > Pourquoi puis-je renvoyer un « std :: unique_ptr » sans « std :: move » ?

Pourquoi puis-je renvoyer un « std :: unique_ptr » sans « std :: move » ?

Barbara Streisand
Libérer: 2024-12-15 19:16:10
original
416 Les gens l'ont consulté

Why Can I Return a `std::unique_ptr` Without `std::move`?

Pourquoi renvoyer un std::unique_ptr sans std::move est autorisé

Bien que std::unique_ptr interdise la construction de copies, les déclarations de retour comportant unique_ptrs sont exemptés. Ce comportement est conforme à la spécification du langage C, en particulier aux clauses 12.8 §34 et §35.

Lorsque des conditions spécifiques sont remplies, les implémentations peuvent omettre la construction de copie/déplacement pour les objets de classe. Cette optimisation, connue sous le nom d'élision de copie, est autorisée dans les instructions return pour les types de retour de classe au sein des fonctions. L'exception s'applique aux expressions impliquant un objet automatique non volatile dont le type correspond au type de retour de la fonction.

De plus, lorsque l'élision de copie se produit pour un objet lvalue, la résolution de surcharge pour le constructeur de copie se déroule comme si l'objet était désigné par une rvalue.

Implémentation du compilateur

Cette exception est gérée dans le compilateur. Les compilateurs exploitent les spécifications du langage pour reconnaître et appliquer des techniques d'élision, optimisant ainsi le code en éliminant les opérations inutiles.

Retour de valeur nommée

Il est à noter que le retour par valeur est l'option optimale dans de tels scénarios. Même sans élision, les valeurs nommées dans les instructions return sont traitées comme des rvalues, entraînant une surcharge minimale.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal