¿Por qué esto:
#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;
}
Dar salida de:
La respuesta es:
En vez de:
La respuesta es: cuatro
SandBox::member
se lee, la cadena temporal todavía está viva .
string("four")
se destruye al final de la expresión completa y no después de que Sandbox
salga el constructor? La respuesta de Potatoswatter dice que un enlace temporal a un miembro de referencia en un ctor-initializer del constructor (§12.6.2 [class.base.init]) persiste hasta que el constructor sale.
cout << "The answer is: " << Sandbox(string("four")).member << endl;
, entonces estaría garantizado que funcionaría.