Die Funktion ist wohlgeformt (syntaktisch korrekt), aber sobald die Funktion zurückkehrt, ist die zurückgegebene Referenz ungültig und kann nicht verwendet werden.
Um zu verdeutlichen: der betreffende Code tut nicht aufrufen undefinierte Verhalten. Sie können diese Funktion sicher aufrufen, solange Sie nicht den Rückgabewert verwenden, zB das gilt:
test_function(); // ok
Wenn Sie jedoch versuchen, den Rückgabewert zu verwenden (dh mit ihm einen anderen Bezug zu initialisieren oder zu kopieren die referent in ein anderes Objekt), dann werden Sie nicht definiertes Verhalten aufrufen, weil die Lebensdauer des referent (das Objekt x
) beendet haben wird (x
zerstört werden, wenn die Funktion zurückgibt, weil es eine automatische Variable) ist:
std::vector<int>& vec = test_function(); // undefined
std::vector<int> vec = test_function(); // undefined
Verdammt, schlag mich dazu! – Anthony
Der Code, der angezeigt wird, enthält (für sich) kein undefiniertes Verhalten. Die UB würde in anderem Code passieren, der diese Funktion aufruft. –