相关疑难解决方法(0)

如何通过编译器实现静态变量初始化?

我对函数中静态变量的底层实现感到好奇.

如果我声明一个基本类型的静态变量(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;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果静态变量是类的实例:

class MyClass
{
    //...
};

void SomeFunction();

int main(int argCount, char ** argList)
{
    SomeFunction();
}

void SomeFunction()
{
    static MyClass myVar;
}
Run Code Online (Sandbox Code Playgroud)

我知道直到第一次调用该函数时才会初始化它.由于编译器无法知道第一次调用函数的时间,它是如何产生这种行为的?它本质上是在函数体中引入if块吗?

static bool initialized = 0;
if (!initialized)
{
    // construct myVar
    initialized = 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction static initialization

20
推荐指数
2
解决办法
2万
查看次数