use*_*652 9 c++ static dynamic
函数内部的静态变量仅在程序的生命周期内分配一次.
所以,如果我有一个像这样的功能:
void f(int n) {
static int *a = new int[n];
}
Run Code Online (Sandbox Code Playgroud)
我先打电话
f(1)
Run Code Online (Sandbox Code Playgroud)
然后
f(3)
Run Code Online (Sandbox Code Playgroud)
第二次通话后阵列有多大?
static变量local local函数在第一次控制通过它们时被初始化.标准中的相关部分是6.7 [stmt.dcl].也就是说,除非您明确更改其大小,否则数组将获取大小1并保持此大小.
C++ 2011中的好处是初始化static变量也是线程安全的:如果另一个线程在初始化变量时到达实例,则第二个线程被阻塞,直到初始化完成.
static当控制流第一次到达声明时,将初始化局部变量.在这种情况下,由于您使用的是第一次1作为n参数,你会是一个分配的大小int.
做这种事情是个坏主意.您应该只使用本地,非静态std::vector或其他更高级别的容器.