如何在默认构造函数中初始化对空字符串的 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) {}
};