如何在默认构造函数中初始化对空字符串的 class 成员引用
How to initialize a class member reference to the empty string in the default constructor
如何在此默认构造函数中将 class 成员引用初始化为空字符串 ("")。
class Document {
string& title;
string* summary;
Document() : title(/*what to put here*/), summary(NULL) {}
};
没有明智的方法来做到这一点。引用必须引用现有对象(更好的表达方式是引用 是 现有对象),而 std::string
将在来自 ""
的初始化列表将在构造函数完成后被销毁,从而在每次尝试使用您的成员变量时留下未定义的行为。
现在,我说"no sensible way"。当然,有一些黑客可以实现你想要的,例如:
// 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) {}
};
如何在此默认构造函数中将 class 成员引用初始化为空字符串 ("")。
class Document {
string& title;
string* summary;
Document() : title(/*what to put here*/), summary(NULL) {}
};
没有明智的方法来做到这一点。引用必须引用现有对象(更好的表达方式是引用 是 现有对象),而 std::string
将在来自 ""
的初始化列表将在构造函数完成后被销毁,从而在每次尝试使用您的成员变量时留下未定义的行为。
现在,我说"no sensible way"。当然,有一些黑客可以实现你想要的,例如:
// 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) {}
};