use*_*947 1 c++ oop constructor initialization c++11
class a
{
public:
a() : b(5), a1(10) //will firstly initialize a1 then b, so order here doesn't matter
int a1;
private:
int b;
}
Run Code Online (Sandbox Code Playgroud)
问题是如何更改顺序(在a1之前初始化b)?我必须将公共成员置于私人之上,以便解决方案对我来说不合适.当然在这里我使用整数,问题更复杂,但它只是一个显示我的问题的例子.
您无法更改初始化的顺序,该顺序始终由您的类中成员的声明顺序定义.这是必要的,因为破坏的顺序必须与构造顺序相反,如果你改变了构造的顺序,编译器将被迫跟踪你已经初始化你的成员的顺序,以便产生适当的破坏序列.
所以我的建议是:
要实现第2点,您可以为成员提供默认构造函数以进行默认初始化,然后按照构造函数体内所需的顺序正确初始化成员(换句话说,将构造与逻辑初始化分离).