调用非默认构造函数作为成员初始化
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;
}
我有一个 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;
}