为什么这样做:
#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;
,那么它将保证能够工作。