Ich frage mich, was der Standard über das folgende Stück Code sagt. Kann string
Destruktor des temporären Objekts vor dem Aufruf printPointer
ausgeführt werden?Implizite Destruktorausführung in Funktionsaufruf
p.s. Der VS2010-Compiler beschwert sich nicht über diesen Code und funktioniert ordnungsgemäß.
void printPointer(const string* pointer)
{
cout << *pointer << endl;
}
const string* func(const string& s1)
{
return &s1;
}
int main()
{
printPointer(func("Hello, World!!!"));
}
Die temporäre Zeichenfolge wird zerstört erst am Ende der Anweisung. Jemand kann wahrscheinlich die Referenz ausgraben (etwas mit Sequenzpunkten?), Aber Sie können es selbst sehen: http://ideone.com/N3Brll – CompuChip