Почему это:
#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;
}
Дайте вывод:
Ответ:
Вместо того:
Ответ: четыре
SandBox::member
читается, временная строка все еще жива .
string("four")
уничтожается в конце полного выражения, а не после Sandbox
выхода из конструктора? В ответе Potatoswatter сказано, что временная привязка к элементу ссылки в ctor-initializer конструктора (§12.6.2 [class.base.init]) сохраняется до выхода из конструктора.
cout << "The answer is: " << Sandbox(string("four")).member << endl;
, то это гарантированно сработает.