#include <iostream>
using namespace std;
struct CL
{
CL()
{
cout<<"CL()"<<endl;
}
CL(const CL&)
{
cout<<"CL(const CL&)"<<endl;
}
~CL()
{
cout<<"~CL()"<<endl;
}
};
CL cl;
CL fnc()
{
return cl;
}
int main() {
cout<<"start"<<endl;
const CL& ref=static_cast<const CL&>(fnc());
//...Is "ref" valid here??
cout<<"end"<<endl;
return 0;
}
Was von fnc() zurückgegeben Lebensdauer von temporären Objekt ist? Ist es Lebenszeit von "ref" oder von temporärer Referenz static_cast (fnc()), die am Ende der Anweisung zerstört wurde?const Verweis auf temporäre Referenz
Ausgabe von gcc (Lebensdauer von FNC() ist Lebensdauer "ref"):
CL() //global object "cl"
start
CL(const CL&)
end
~CL()
~CL() //global object "cl"
Ausgabe von VS2013 (Lebensdauer von FNC() ist Lebensdauer von temporärer Referenz):
CL() //global object "cl"
start
CL(const CL&)
~CL()
end
~CL() //global object "cl"
Was ist korrekt von Standard?
möglich Duplikat [garantierte Lebensdauer von temporären in C++?] (Http://stackoverflow.com/questions/584824/guaranteed-lifetime-of-temporary-in-c) –
Nur frage mich, was passiert, wenn Sie entferne die 'static_cast <>'? Ich würde erwarten, dass sich beide dann genauso verhalten, nur für den Fall, dass Sie ein echtes Problem haben, das Sie lösen wollen. Wie interpretieren Sie den Standard zu diesem Thema? –
@UlrichEckhardt Der 'static_cast' macht hier den Unterschied. Ohne es wird die Lebensdauer von 'fnc()' garantiert auf 'ref' erweitert. – Angew