Warum macht das:
#include <string>
#include <iostream>
using namespace std;
class Sandbox
{
public:
Sandbox(const string& n) : member(n) {}
const string& member;
};
int main()
{
Sandbox sandbox(string("four"));
cout << "The answer is: " << sandbox.member << endl;
return 0;
}
Geben Sie die Ausgabe von:
Die Antwort ist:
Anstatt:
Die Antwort lautet: vier
SandBox::member
ist die temporäre Zeichenfolge also noch lebendig, wenn sie gelesen wird .
string("four")
am Ende des vollständigen Ausdrucks und nicht nach dem Beenden des Sandbox
Konstruktors zerstört wird? Die Antwort von Potatoswatter lautet: Eine temporäre Bindung an ein Referenzelement im ctor-Initialisierer eines Konstruktors (§12.6.2 [class.base.init]) bleibt bestehen, bis der Konstruktor beendet wird.
cout << "The answer is: " << Sandbox(string("four")).member << endl;
, dann würde es garantiert funktionieren.