Локальная переменная функции не будет автоматически инициализироваться нулем, независимо от того, находится ли функция в анонимном пространстве имен, статической или какой-либо другой. Это потому, что локальные переменные внутри функции не являются статическими переменными. Чтобы у локальной переменной была статическая продолжительность хранения, вы должны явно пометить ее как static
.
int foo; // static storage duration (because it's global) automatically zero-initialized
static int foo2; // static storage duration (because it's global) automatically zero-initialized. The static keyword just gives the name 'foo2' internal linkage and has nothing to do with static storage duration.
namespace {
int foo; // static storage duration, automatically zero-initialized
void bar() {
int f; // local variable, not automatically zero-initialized
static int g; // static storage duration (because of the keyword static), automatically zero-initialized
}
}