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