Как инициализация статической переменной осуществляется компилятором?

Мне любопытно о базовой реализации статических переменных внутри функции.

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

Ответы на вопрос(5)

Ваш ответ на вопрос