Мне любопытно о базовой реализации статических переменных внутри функции.
Если я объявляю статическую переменную фундаментального типа (char, int, double и т.д.) и даю ему начальное значение, я полагаю, что компилятор просто устанавливает значение этой переменной в самом начале программа до main()
вызывается:
void SomeFunction();
int main(int argCount, char ** argList)
{
// at this point, the memory reserved for 'answer'
// already contains the value of 42
SomeFunction();
}
void SomeFunction()
{
static int answer = 42;
}
Однако, если статическая переменная является экземпляром класса:
class MyClass
{
//...
};
void SomeFunction();
int main(int argCount, char ** argList)
{
SomeFunction();
}
void SomeFunction()
{
static MyClass myVar;
}
Я знаю, что он не будет инициализирован до первого вызова функции. Поскольку у компилятора нет возможности узнать, когда функция будет вызвана в первый раз, как это порождает такое поведение? По существу ли он вводит if-блок в тело функции?
static bool initialized = 0;
if (!initialized)
{
// construct myVar
initialized = 1;
}