Perché questo:
#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;
}
Dai un output di:
La risposta è:
Invece di:
La risposta è: quattro
SandBox::member
viene letto, la stringa temporanea è ancora viva .
string("four")
viene distrutto alla fine dell'espressione completa e non dopo l' Sandbox
uscita del costruttore? La risposta di Potatoswatter dice che un vincolo temporaneo a un membro di riferimento nell'inizializzatore del ctor di un costruttore (§12.6.2 [class.base.init]) persiste fino a quando il costruttore non esce.
cout << "The answer is: " << Sandbox(string("four")).member << endl;
, allora sarebbe garantito che funzionasse.