静态全局函数的静态本地成员?

时间:2012-12-27 04:19:42

标签: c++ c++11

如果我在静态全局函数中有静态局部变量(不是类静态,全局静态)......

Foo.cpp中:

static void f()
{
    static T x;
    ...
}

x实例是否保证在整个应用程序中是单例?

如果两个翻译单元如上所述定义static void f()怎么办?他们每个人都有自己的x实例,还是会共享?为什么呢?

2 个答案:

答案 0 :(得分:4)

static函数具有内部链接,因此每个翻译单元中的每个f都是不同的独立函数,并且会有x的实例每个翻译单位。

答案 1 :(得分:2)

  

x实例是否保证在整个应用程序中是单例?

保证在第一次调用f()时创建。它是static storage duration object,这意味着它将被另一个static storage duration object销毁(与创建的顺序相反)。

此变量x仅在函数f()内可见。

  

如果两个翻译单元如上所述定义静态void f(),该怎么办?他们每个人都有自己的x实例,还是会共享?为什么呢?

因为这是一个静态函数。它是翻译单位的当地人。定义此函数的每个翻译单元都有自己的函数及其内部变量的副本。这不会在翻译单元外暴露,因此它只能来自翻译单元。