Class 初始化 - 属性没有默认构造函数

Class initialization - attribute has no default constructor

我有两个 类 Bar 和 Foo

class Bar
{
  Foo attr;        
public:      
  Bar(int i);
}

class Foo
{
  std::string _name;        
public:      
  Foo(std::string name) : _name(name){}
}

问题是 Foo 没有默认构造函数,只有一个采用 std::string 的构造函数。此外 operator= 是 Foo 的私有成员。那么我如何初始化 attr 使其名称在 i==0 时为 "good" 否则为 "bad"

使用构造函数初始化列表:

class Bar
{
public:
    Bar(int i) : attr(i == 0 ? "good" : "bad") {}

private:
    Foo attr;
};

您可能还应该制作 Bar 构造函数 explicit,这样随机整数就不会在您的代码中意外地被解释为 Bars。