これはなぜですか:
#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;
}
出力を与える:
答えは:
の代わりに:
答えは:4
SandBox::member
読み込まれ、一時的な文字列がまだ生きています。
string("four")
後ではなく、一時式が完全な式の最後に破棄される理由を説明していただけSandbox
ますか?Potatoswatterの回答によると、コンストラクターのctor-initializer(§12.6.2[class.base.init])の参照メンバーへの一時的なバインドは、コンストラクターが終了するまで持続します。
cout << "The answer is: " << Sandbox(string("four")).member << endl;
、それは動作することが保証されます。