Переменные, объявленные со статической / глобальной областью действия, всегда инициализируются как минимум в VC ++.
При некоторых обстоятельствах может существовать разница в поведении между:
int x = 0;
int main() { ... }
и
int x;
int main() { ... }
Если вы используете сегменты общих данных, то VC ++ по крайней мере использует явную инициализацию вместе с #pragma data_seg
, чтобы определить, должна ли конкретная переменная помещаться в сегмент общих данных или сегмент частных данных для процесса.
Для забавы рассмотрим, что произойдет, если у вас есть статический объект C ++ с конструктором / деструктором, объявленным в общем сегменте данных. Конструктор / деструктор вызывается каждый раз, когда exe / dll присоединяется к сегменту данных, что почти наверняка не то, что вам нужно.
Подробнее в этой статье KB