Какая функция отвечает за инициализацию объекта класса в глобальной области видимости в C ++? - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь узнать больше об инициализации объекта глобальной области видимости в 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 голосов
/ 05 июня 2018

Какая функция отвечает за глобальную инициализацию объекта

Стандарт не указывает, что.

Он только указывает, что они инициализируются до вызова main().Реализация может свободно выбирать любой механизм для достижения этой цели.

Кроме того, что это за инициализация (статическая или динамическая)?

Непонятно, что вы пытаетесь сделатьподразумевать здесь.Это статическая инициализация.Однако все статические инициализации делятся на:

  1. Нулевая инициализация.
  2. Постоянная инициализация.
  3. Динамическая инициализация.

В вашемслучай, это динамическая инициализация.

Если у вас есть,

int var1;

, то он будет инициализирован нулем.

Если у вас было

int var2 = 10;

он будет инициализирован константой.

Если у вас было

int var3 = someFunction();

, он, скорее всего, будет инициализирован с использованием динамической инициализации.

...