Temporäre Objektlebensdauer mit Const-Referenzen verstehen
Einführung:
In C die Lebensdauer Die Dauer temporärer Objekte erstreckt sich normalerweise nur bis zum Ende des Ausdrucks, in dem sie erstellt wurden. Eine Ausnahme entsteht jedoch, wenn temporäre Objekte an konstante Referenzen gebunden sind und ihre Lebensdauer über den ursprünglichen Bereich hinaus verlängert.
Spezifische Anfrage:
Warum wird der folgende Code kompiliert und erfolgreich ausführen, obwohl die von der foo-Funktion zurückgegebene Zeichenfolge ein temporäres Objekt ist?
<code class="cpp">string foo() { return string("123"); } int main() { const string& val = foo(); printf("%s\n", val.c_str()); return 0; }</code>
Antwort:
Der C-Standard definiert explizit die Bindung eines temporären Objekts auf einen Verweis auf const im Stapel verlängert die Lebensdauer des Temporären bis zur Lebensdauer des Verweises selbst. Daher bleibt im bereitgestellten Code die von foo() zurückgegebene temporäre Zeichenfolge bis zur schließenden Klammer der Hauptfunktion am Leben.
Mechanismus:
Diese Funktion stellt dies sicher Verweise auf temporäre Objekte werden nicht zu baumelnden Verweisen, die zu undefiniertem Verhalten führen würden. Während das temporäre Objekt an die konstante Referenz gebunden ist, wird sein Speicher effektiv fixiert, sodass das Programm es weiterhin sicher verwenden kann.
Einschränkungen:
Es ist wichtig zu beachten dass diese Lebensdauerverlängerung nur für stapelbasierte Referenzen gilt. Im Gegensatz dazu verlängern Referenzen, die Mitglieder von Objekten sind, nicht die Lebensdauer temporärer Objekte.
Zusätzliche Informationen:
Eine ausführlichere Diskussion zu diesem Thema finden Sie unter GotW #88: Ein Kandidat für den „Most Important const“ von Herb Sutter.
Das obige ist der detaillierte Inhalt vonWarum verlängern Const-Referenzen die Lebensdauer temporärer Objekte in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!