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!