C++ 构造函数初始化子对象数组?

C++ 构造函数初始化子对象数组?,c++,constructor,C++,Constructor,假设我在一个类中有几个对象,每个对象都需要用不同的值构造。我可以这样写: class b { public: b(int num) { // 1 for a.b1, and 2 for a.b2 } }; class a { public: b b1; b b2; a() : b1(1), b2(2) { } }; 但是,如果这些多个对象存储在一个数组中,是否可以执行相同的操作 我的第一次尝试无法编译: class a { public

假设我在一个类中有几个对象,每个对象都需要用不同的值构造。我可以这样写:

class b
{
public:
  b(int num)
    {
    // 1 for a.b1, and 2 for a.b2
    }
};

class a
{
public:
  b b1;
  b b2;
  a() : b1(1), b2(2)
    {
    }
};
但是,如果这些多个对象存储在一个数组中,是否可以执行相同的操作

我的第一次尝试无法编译:

class a
{
public:
  b bb[2];
  a() : bb[0](1), bb[1](2)
    {
    }
};

你不能直接这样做;您需要初始化构造函数主体中的数组元素

数组的元素是在输入构造函数主体之前默认构造的。由于示例类
b
不是默认可构造的(即,它没有可以用零参数调用的构造函数),因此不能将
b
数组作为成员变量

如果可以,您可以拥有在其他上下文中不可默认构造的类型的数组