Dlaczego to:
#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;
}
Podaj wynik:
Odpowiedź to:
Zamiast:
Odpowiedź brzmi: cztery
SandBox::memberjest czytany, tymczasowy ciąg jest nadal żywy .
string("four")jest niszczony na końcu pełnego wyrażenia, a nie po zamknięciu Sandboxkonstruktora? Odpowiedź Potatoswatter mówi, że tymczasowe powiązanie z elementem referencyjnym w inicjatorze ctor konstruktora (§12.6.2 [class.base.init]) utrzymuje się do momentu zakończenia konstruktora.
cout << "The answer is: " << Sandbox(string("four")).member << endl;, to na pewno zadziała.