如何在此默认构造函数中初始化对空字符串("")的类成员引用。
class Document {
string& title;
string* summary;
Document() : title(/*what to put here*/), summary(NULL) {}
};
答案 0 :(得分:3)
没有明智的方法可以做到这一点。引用必须引用现有对象(更好的方式是将引用 现有对象),以及将在初始化列表中构建的std::string
在构造函数完成后,""
将被销毁,在每次尝试使用您的成员变量时都会留下未定义的行为。
现在,我说"没有合理的方式"。当然,有一些黑客可以实现你想要的东西,例如:
// bad hack:
std::string &EmptyStringThatLivesForever()
{
static std::string string;
return string;
}
class Document {
string& title;
string* summary;
Document() : title(EmptyStringThatLivesForever()), summary(NULL) {}
};
但是我怀疑这样的技巧会在任何严肃的代码审查中存在。
真正的解决方案是摆脱参考:
class Document {
string title;
string* summary;
Document() : title(""), summary(NULL) {}
};