如果我在静态全局函数中有静态局部变量(不是类静态,全局静态)......
Foo.cpp中:
static void f()
{
static T x;
...
}
x实例是否保证在整个应用程序中是单例?
如果两个翻译单元如上所述定义static void f()
怎么办?他们每个人都有自己的x实例,还是会共享?为什么呢?
答案 0 :(得分:4)
static
函数具有内部链接,因此每个翻译单元中的每个f
都是不同的独立函数,并且会有x
的实例每个翻译单位。
答案 1 :(得分:2)
x实例是否保证在整个应用程序中是单例?
保证在第一次调用f()
时创建。它是static storage duration object
,这意味着它将被另一个static storage duration object
销毁(与创建的顺序相反)。
此变量x
仅在函数f()
内可见。
如果两个翻译单元如上所述定义静态void f(),该怎么办?他们每个人都有自己的x实例,还是会共享?为什么呢?
因为这是一个静态函数。它是翻译单位的当地人。定义此函数的每个翻译单元都有自己的函数及其内部变量的副本。这不会在翻译单元外暴露,因此它只能来自翻译单元。