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

时间:2018-06-04 22:08:51

标签: c++ libc

我正在尝试了解有关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)?

它是什么样的初始化(静态或动态)?从我认为它是动态初始化。

1 个答案:

答案 0 :(得分:3)

  

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

标准没有指明。

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

  

它是什么样的初始化(静态或动态)?

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

  1. 零初始化。
  2. 不断的初始化。
  3. 动态初始化。
  4. 在您的情况下,它是动态初始化。

    如果有,

    int var1;
    

    它将初始化为零。

    如果你有

    int var2 = 10;
    

    它将被不断初始化。

    如果你有

    int var3 = someFunction();
    

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