Pourquoi cela:
#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;
}
Donner la sortie de:
La réponse est:
Au lieu de:
La réponse est: quatre
SandBox::member
est lu, la chaîne temporaire est toujours vivante .
string("four")
est détruit à la fin de l'expression complète, et non après la fermeture du Sandbox
constructeur? La réponse de Potatoswatter dit qu'une liaison temporaire à un membre de référence dans le ctor-initializer d'un constructeur (§12.6.2 [class.base.init]) persiste jusqu'à ce que le constructeur se termine.
cout << "The answer is: " << Sandbox(string("four")).member << endl;
, cela fonctionnera à coup sûr.