哪个函数负责C++全局范围内的类对象初始化?

Which function is responsible for class object initialization at global scope in C++?

本文关键字:对象 初始化 范围内 全局 函数 C++      更新时间:2023-10-16

我正在尝试了解有关 c++ 中全局范围对象初始化的更多信息。对于全局范围内的class/struct对象,哪个函数负责其初始化?

请考虑以下示例:

#include <iostream>
struct foo {
foo() {
std::cout << "foo's constructor" << std::endl;
}
};
foo bar;
int main() {
std::cout << "main" << std::endl;
return 0;
}

我知道输出将是:

foo's constructor
main

我不明白的是为什么?哪个函数负责全局对象初始化(如int main__libc_start_main调用(?

还有它是什么类型的初始化(静态或动态(?从我认为它是动态初始化。

哪个函数负责全局对象初始化

该标准没有具体说明这一点。

它仅指定在调用main()之前初始化它们。实现可以自由选择任何机制来实现这一点。

还有它是什么类型的初始化(静态或动态(?

目前尚不清楚您在这里想暗示什么。它是静态初始化。但是,所有静态初始化都分为:

  1. 零初始化。
  2. 不断启动。
  3. 动态初始化。

在您的情况下,它是动态初始化。

如果你有,

int var1;

它将初始化为零。

如果你有

int var2 = 10;

它将不断初始化。

如果你有

int var3 = someFunction();

它很可能使用动态初始化进行初始化。