调用非默认构造函数作为成员初始化

Call non-default constructor as member initialization

我有一个 class "A" 和一个 class "B" 使得 A 包含 B

的一个实例
class A
{
    B b = B(parameters...);
    Other thing = 3;
}

这段代码的问题是 B 没有(也不应该!)复制构造函数,所以编译器报错

我希望能够像下面这样调用 B 的构造函数,但它会将其解释为函数声明

class A
{
    B b(parameters...);
    Other thing = 3;
}

有没有办法在 class 的定义中调用非默认构造函数?

Default member initializer (C++11 起) 仅支持大括号或等于初始化器;你可以在这里使用大括号初始化器。

class A
{
    B b{parameters...};
    Other thing = 3;
};

如果您需要使复制构造函数不可见,您可以将其设置为 private

Class B
{
     public:
     B(parameters...){};

     private:
     B(B b){};
}

至于你的代码,我认为你的问题是你需要像这样在 A 的构造函数中启动成员:

 class A
{
    A()
      : B(parameters...)
    {
        thing = 3;
    }

    B b;
    Other thing;
}