По крайней мере, в C ++ 11, когда выражение, используемое для инициализации локальной статической переменной, не является «constexpr» (не может быть оценено компилятором), тогда инициализация должна произойти во время первого вызова функции.Простейшим примером является непосредственное использование параметра для инициализации локальной статической переменной.Таким образом, компилятор должен выдать код, чтобы угадать, является ли вызов первым или нет, что, в свою очередь, требует локальной логической переменной.Я скомпилировал такой пример и проверил это, увидев код сборки.Пример может быть таким:
void f( int p )
{
static const int first_p = p ;
cout << "first p == " << p << endl ;
}
void main()
{
f(1); f(2); f(3);
}
конечно, когда выражением является constexpr, тогда это не требуется, и переменная может быть инициализирована при загрузке программы с использованием значения, сохраненного компилятором вкод выходной сборки.