Como a inicialização de variável estática é implementada pelo compilado
Estou curioso sobre a implementação subjacente de variáveis estáticas dentro de uma funçã
Se eu declarar uma variável estática de um tipo fundamental (char, int, double, etc.) e atribuir um valor inicial, imagino que o compilador simplesmente defina o valor dessa variável no início do programa antes demain()
é chamado
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;
}
No entanto, se a variável estática for uma instância de uma classe:
class MyClass
{
//...
};
void SomeFunction();
int main(int argCount, char ** argList)
{
SomeFunction();
}
void SomeFunction()
{
static MyClass myVar;
}
Sei que não será inicializado até a primeira vez que a função for chamada. Como o compilador não tem como saber quando a função será chamada pela primeira vez, como ela produz esse comportamento? Introduz essencialmente um bloco if no corpo da função?
static bool initialized = 0;
if (!initialized)
{
// construct myVar
initialized = 1;
}