Heim >Backend-Entwicklung >C++ >Warum kann ich ein „std::unique_ptr' ohne „std::move' zurückgeben?

Warum kann ich ein „std::unique_ptr' ohne „std::move' zurückgeben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 19:16:10418Durchsuche

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

Warum die Rückgabe eines std::unique_ptr ohne std::move zulässig ist

Obwohl std::unique_ptr die Kopierkonstruktion verbietet, sind Rückgabeanweisungen mit unique_ptrs sind ausgenommen. Dieses Verhalten steht im Einklang mit der C-Sprachspezifikation, insbesondere den Abschnitten 12.8 §34 und §35.

Wenn bestimmte Bedingungen erfüllt sind, können Implementierungen die Kopier-/Verschiebungskonstruktion für Klassenobjekte weglassen. Diese als Kopierelision bezeichnete Optimierung ist in Rückgabeanweisungen für Klassenrückgabetypen innerhalb von Funktionen zulässig. Die Ausnahme gilt für Ausdrücke, an denen ein nichtflüchtiges automatisches Objekt beteiligt ist, dessen Typ mit dem Funktionsrückgabetyp übereinstimmt.

Darüber hinaus erfolgt die Überladungsauflösung für den Kopierkonstruktor bei einer Kopierelision für ein L-Wert-Objekt so, als ob das Objekt angegeben wäre durch einen R-Wert.

Compiler-Implementierung

Diese Ausnahme wird innerhalb der behandelt Compiler. Compiler nutzen Sprachspezifikationen, um Elisionstechniken zu erkennen und anzuwenden und so den Code zu optimieren, indem sie unnötige Vorgänge eliminieren.

Benannte Wertrückgabe

Es ist bemerkenswert, dass die Rückgabe nach Wert die optimale Option ist solche Szenarien. Auch ohne Elision werden benannte Werte in Rückgabeanweisungen als R-Werte behandelt, was nur minimalen Overhead verursacht.

Das obige ist der detaillierte Inhalt vonWarum kann ich ein „std::unique_ptr' ohne „std::move' zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn