这样的事情如何在Cpp中初始化,当我在我的主要部分时:测试测试;
class Testing
{
public:
Testing();
void initalize();
~Testing();
void run();
private:
int x;
int y;
int z;
bool isBugged;
OtherClass otherClass_;
};
订单是什么?
答案 0 :(得分:2)
首先调用类构造函数,初始化列表可用于参数化成员构造函数调用,否则在类构造函数入口处使用它们的默认构造函数。
Class() : otherClass_("fred", 42) {
//ctor body
}
会在OtherClass
的ctor主体之前调用OtherClass(char *name, int age)
的(Class
)构造函数。否则将使用默认构造函数(无参数)。但是,由于成员在身体中可用,因此它们在身体进入之前构建。上面的示例是一个初始化列表,并且Class
的构造函数有机会显式调用成员构造函数,否则这些构造函数将解析为此时的默认构造函数调用。
成员构造的顺序是它们在类声明中出现(声明)的顺序。如果这与您在初始化列表中调用构造函数的顺序不同,编译器应该发出警告。
答案 1 :(得分:1)
你没有显示构造函数的代码,但假设它是微不足道的,那么在Testing()
中构造的唯一东西是OtherClass
。
如果test
属于自动存储,则不会初始化其他成员变量,或者静态存储< 静态存储 / em>的。这意味着如果test
属于自动存储,则其成员x
等。将具有不确定的值,就像它们被声明为函数变量一样。
答案 2 :(得分:1)
首先,按照声明的顺序初始化基类子对象(尽管你的类没有这些子对象)。
然后按照声明的顺序初始化成员。如果它们出现在构造函数的初始化列表中,那么它们将按照那里的指定进行初始化;否则它们是默认初始化的。对于int
和bool
成员以及一般的POD类型,这意味着它们未被初始化(或者如果对象具有静态存储持续时间则为零初始化),除非它们位于初始化器中列表。
最后,执行构造函数体。如果它正常返回,那么该对象是完全构造的。