【发布时间】:2010-10-28 06:13:31
【问题描述】:
我很好奇函数中静态变量的底层实现。
如果我声明一个基本类型(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;
}
【问题讨论】:
标签: c++ compiler-construction static initialization