我注意到,如果在代码中初始化 C++ 中的静态变量,则初始化仅在第一次运行该函数时运行。这很酷,但它是如何实现的?它会翻译吗?
我注意到,如果在代码中初始化 C++ 中的静态变量,则初始化仅在第一次运行该函数时运行。
这很酷,但是它是如何实现的呢?它是否转化为某种扭曲的 if 语句?(如果给定一个值,则...)
void go( int x )
{
static int j = x ;
cout << ++j << endl ; // see 6, 7, 8
}
int main()
{
go( 5 ) ;
go( 5 ) ;
go( 5 ) ;
}
是的,编译器通常会生成一个隐藏的布尔值“这是否已初始化?”标志和一个 if
在每次执行该函数时运行的标志。
这里有更多阅读材料: 编译器如何实现静态变量初始化?