Heim >Backend-Entwicklung >C++ >## Verlängert das Binden einer Const-Referenz an ein Unterobjekt eines Temporärobjekts dessen Lebensdauer?
Betrachten Sie den folgenden Code:
<code class="cpp">#include <stdio.h> struct P2d { double x, y; P2d(double x, double y) : x(x), y(y) {} ~P2d() { printf("Destructor called\n"); } }; P2d center() { return P2d(10, 10); } int main(int argc, const char *argv[]) { const double& x = center().x; printf("x = %.18g\n", x); return 0; }</code>
In diesem Beispiel ist center() gibt ein temporäres P2d-Objekt zurück. Es stellt sich die Frage: Wie lang ist die Lebensdauer dieses temporären Objekts?
Verschiedene Compiler weisen unterschiedliche Verhaltensweisen auf:
Gemäß dem C-Standard verlängert das Binden eines Verweises an ein Unterobjekt eines temporären Objekts nicht die Lebensdauer des temporären Objekts . Dies wird jedoch durch CWG 1651 abgedeckt, der eine Änderung zur Verlängerung der Lebensdauer in solchen Fällen vorschlägt.
Der Status quo ist, dass nur Vorwerte als Provisorien behandelt werden. Mitgliedszugriffsausdrücke wie center().x werden jedoch sowohl von g als auch von clang als Werte betrachtet.
Mit der bevorstehenden Lösung wird klargestellt, dass Mitgliederzugriffsausdrücke zu temporären Ausdrücken führen und dass das Binden eines Verweises auf diese Ausdrücke die Lebensdauer des entsprechenden temporären Objekts verlängert.
Das obige ist der detaillierte Inhalt von## Verlängert das Binden einer Const-Referenz an ein Unterobjekt eines Temporärobjekts dessen Lebensdauer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!