Мне любопытно узнать о базовой реализации статических переменных внутри функции.
Если я объявляю статическую переменную фундаментального типа (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;
}