面试题答案
一键面试-
执行顺序:
- 全局变量在程序启动时首先被初始化。
- 静态局部变量在其所在函数第一次被调用时初始化,所以在main函数之前不会初始化(除非其所在函数在main之前被调用,这种情况比较特殊且不属于常规在main之前的初始化讨论范畴)。
- 类的全局对象的构造函数在全局变量初始化之后被调用,因为全局对象也是一种全局变量,只不过是类类型的,其构造函数在对象初始化时执行。
总结顺序为:全局变量 -> 类的全局对象的构造函数(若有类的全局对象) -> 静态局部变量(在main函数之前,若不考虑其所在函数提前调用情况,可不考虑静态局部变量)。
-
原因:
- C++ 程序的启动过程中,系统会首先为全局变量分配内存并进行初始化。这是因为全局变量的作用域贯穿整个程序,需要在程序一开始就准备好。
- 类的全局对象同样属于全局变量范畴,只不过是类类型,它依赖于全局变量初始化机制,在全局变量初始化过程中,遇到类的全局对象时,会调用其构造函数进行初始化。
- 静态局部变量的设计初衷是在函数内保持状态,所以它的初始化是延迟到函数第一次调用时才进行,以符合其局部性的特点,因此在main函数之前通常不会初始化。