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 in C 17 eine Kopie zurück und zerstört das Original (NRVO)?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-22 06:50:15387Durchsuche

Does Returning a Local Variable in C  17 Return a Copy and Destroy the 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 :

  • Die lokale Variable wird normal aufgebaut.
  • Die lokale Variable wird dann (abhängig von ihrer Beweglichkeit) auf den Rückgabewert verschoben oder kopiert Standort.
  • Die ursprüngliche lokale Variable wird zerstört.

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!

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