C++ 静态全局函数的静态局部成员?
如果我在静态全局函数中有一个静态局部变量(不是类static,全局static) foo.cpp:C++ 静态全局函数的静态局部成员?,c++,c++11,C++,C++11,如果我在静态全局函数中有一个静态局部变量(不是类static,全局static) foo.cpp: static void f() { static T x; ... } x实例是否保证在整个应用程序中都是单实例 如果如上所述定义了两个翻译单元,该怎么办。他们每个人都有自己的x实例,还是共享?为什么?静态函数具有内部链接,因此每个翻译单元中的每个f都是不同的独立函数,每个翻译单元都有一个x实例 x实例是否保证在整个应用程序中都是单实例 它保证在第一次调用f()时创建。它是一个静
static void f()
{
static T x;
...
}
x实例是否保证在整个应用程序中都是单实例
如果如上所述定义了两个翻译单元,该怎么办。他们每个人都有自己的x实例,还是共享?为什么?
静态
函数具有内部链接,因此每个翻译单元中的每个f
都是不同的独立函数,每个翻译单元都有一个x
实例
x实例是否保证在整个应用程序中都是单实例
它保证在第一次调用f()
时创建。它是一个静态存储持续时间对象
,这意味着它将与另一个静态存储持续时间对象
(按与创建相反的顺序)一起销毁
此变量x
仅在函数f()
中可见
如果两个转换单元如上所述定义了静态void f(),该怎么办。他们每个人都有自己的x实例,还是共享?为什么?
因为这是一个静态函数。它是翻译单位的本地文件。定义此函数的每个转换单元都有其自身的函数及其内部变量副本。这不会暴露在翻译单元外部,因此只能从翻译单元内部进行