Heim > Artikel > Backend-Entwicklung > Gibt die Rückgabe einer lokalen Variablen in C 17 eine Kopie zurück und zerstört das Original (NRVO)?
Gibt die Rückgabe einer lokalen Variablen eine Kopie zurück und zerstört das Original (NRVO)?
In C 17, wenn die Optimierung aktiviert ist (insbesondere , genannt Rückgabewertoptimierung oder NRVO), erfordert die Rückgabe einer lokalen Variablen nicht das Kopieren des Originalobjekts. Stattdessen optimiert der Compiler den Code, um das zurückgegebene Objekt direkt in den Speicher zu konstruieren, wo es sonst kopiert würde. Dies bedeutet, dass das ursprüngliche Objekt effektiv an die Rückgabewertposition verschoben wird und keine Destruktoren aufgerufen werden.
Wenn die Optimierung jedoch deaktiviert ist (mit dem Flag -fno-elide-constructors), wird das Standardverhalten befolgt :
In dem von Ihnen bereitgestellten Code:
test function() { test i(8); return i; }
Bei aktiviertem NRVO gibt es nur einen Konstruktor- und Destruktoraufruf beobachtet, was darauf hinweist, dass das ursprüngliche i-Objekt ohne Kopieren an die Rückgabewertposition verschoben wird.
Bei deaktiviertem NRVO sind sowohl Konstruktor als auch Destruktoraufrufe werden sowohl für das ursprüngliche i-Objekt als auch für das Rückgabewertobjekt beobachtet, was darauf hinweist, dass das ursprüngliche i-Objekt kopiert und dann zerstört wird.
Daher hängt die Antwort auf Ihre Frage davon ab, ob die Optimierung aktiviert ist oder nicht. Wenn NRVO aktiviert ist, wird durch die Rückgabe einer lokalen Variablen keine Kopie zurückgegeben und das Original wird nicht zerstört. Wenn NRVO deaktiviert ist, wird eine Kopie zurückgegeben und das Original zerstört.
Das obige ist der detaillierte Inhalt vonGibt die Rückgabe einer lokalen Variablen in C 17 eine Kopie zurück und zerstört das Original (NRVO)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!