MST

星途 面试题库

面试题:C++中main函数前代码执行顺序相关问题

在C++中,有全局变量、静态局部变量、构造函数(属于类的全局对象的构造函数),请描述它们在main函数之前执行的顺序,并说明原因。
13.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 执行顺序

    • 全局变量在程序启动时首先被初始化。
    • 静态局部变量在其所在函数第一次被调用时初始化,所以在main函数之前不会初始化(除非其所在函数在main之前被调用,这种情况比较特殊且不属于常规在main之前的初始化讨论范畴)。
    • 类的全局对象的构造函数在全局变量初始化之后被调用,因为全局对象也是一种全局变量,只不过是类类型的,其构造函数在对象初始化时执行。

    总结顺序为:全局变量 -> 类的全局对象的构造函数(若有类的全局对象) -> 静态局部变量(在main函数之前,若不考虑其所在函数提前调用情况,可不考虑静态局部变量)。

  2. 原因

    • C++ 程序的启动过程中,系统会首先为全局变量分配内存并进行初始化。这是因为全局变量的作用域贯穿整个程序,需要在程序一开始就准备好。
    • 类的全局对象同样属于全局变量范畴,只不过是类类型,它依赖于全局变量初始化机制,在全局变量初始化过程中,遇到类的全局对象时,会调用其构造函数进行初始化。
    • 静态局部变量的设计初衷是在函数内保持状态,所以它的初始化是延迟到函数第一次调用时才进行,以符合其局部性的特点,因此在main函数之前通常不会初始化。