C++ C++;:哪个先被调用/初始化?类构造函数或其成员变量的构造函数?
当在我的C++ C++;:哪个先被调用/初始化?类构造函数或其成员变量的构造函数?,c++,oop,class,initialization,C++,Oop,Class,Initialization,当在我的main中,我做:测试时,像这样的东西是如何在Cpp中初始化的 class Testing { public: Testing(); void initalize(); ~Testing(); void run(); private: int x; int y; int z; bool isBugged; OtherClass otherClass_; }; 顺序是什么?您不显示构造函数的代码,但假设它很简
main
中,我做:测试时,像这样的东西是如何在Cpp中初始化的
class Testing
{
public:
Testing();
void initalize();
~Testing();
void run();
private:
int x;
int y;
int z;
bool isBugged;
OtherClass otherClass_;
};
顺序是什么?您不显示构造函数的代码,但假设它很简单,那么在Testing()
中构造的唯一内容就是其他类
如果test
为自动存储,则不会初始化其他成员变量;如果为静态存储,则将静态初始化其他成员变量。这意味着,如果test
是自动存储,则其成员x
等。将有一个不确定的值,就像它们被声明为函数变量一样。首先调用类构造函数,可以使用初始值设定项列表来参数化成员构造函数调用,否则在类构造函数入口使用它们的默认构造函数
Class() : otherClass_("fred", 42) {
//ctor body
}
将在类的构造函数主体之前调用其他类的构造函数(其他类(char*name,int age)
)。否则将使用默认构造函数(无参数)。但是,由于构件在主体中可用,因此它们在主体进入之前构造。上面的示例是一个初始值设定项列表,是Class
的构造函数显式调用成员构造函数的机会,否则会在此时解析为默认构造函数调用
成员构造的顺序是它们在类声明中出现(声明)的顺序。如果这与您在初始值设定项列表中调用构造函数的顺序不同,编译器应该警告您。首先,基类子对象按照声明的顺序进行初始化(尽管您的类没有任何这些)
然后,按照声明的顺序,对成员进行草签。如果它们出现在构造器的初始化器列表中,则按照其中的规定进行初始化;否则,它们将默认初始化。对于int
和bool
成员以及POD类型,这意味着它们未初始化(如果对象具有静态存储持续时间,则为零初始化),除非它们在初始化器列表中
最后,执行构造函数体。如果返回正常,则对象已完全构造。如果您向我们展示构造函数集,这将非常有用。例如,在测试的构造函数中,没有初始值设定项列表。因此,在这种情况下,首先,所有三个int
s将被初始化,然后bool
,然后OtherClass
的构造函数,然后测试的构造函数将被初始化,对吗?提前谢谢!