我正在尝试了解有关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
)?
它是什么样的初始化(静态或动态)?从我认为它是动态初始化。
答案 0 :(得分:3)
哪个函数负责全局对象初始化
标准没有指明。
它仅指定在调用main()
之前初始化它们。一个实现可以自由选择任何机制来实现它。
它是什么样的初始化(静态或动态)?
目前还不清楚你想在这里暗示什么。这是静态初始化。但是,所有静态初始化都分为:
在您的情况下,它是动态初始化。
如果有,
int var1;
它将初始化为零。
如果你有
int var2 = 10;
它将被不断初始化。
如果你有
int var3 = someFunction();
很可能会使用动态初始化进行初始化。