Поскольку test
имеет конструктор, он будет запущен при инициализации объекта. Объект будет помещен в область памяти, которая инициализируется нулем. Вы даже можете проверить это, инициализируя значения с помощью i.m
до и после создания объекта:
extern test i;
int dummy1 = i.m;
test i;
int dummy2 = i.m;
Когда вы печатаете dummy1
и dummy2
, вы должны получить 0
и 12
соответственно. Если вы хотите статически инициализировать i
, вам нужно использовать что-то вроде
test i = { 12 };
Однако это работает только с POD. Все, что сказал, обратите внимание, что глобальные данные всегда плохо. Просто не беспокойтесь и делайте все правильно.