Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态全局函数的静态局部成员?_C++_C++11 - Fatal编程技术网

C++ 静态全局函数的静态局部成员?

C++ 静态全局函数的静态局部成员?,c++,c++11,C++,C++11,如果我在静态全局函数中有一个静态局部变量(不是类static,全局static) foo.cpp: static void f() { static T x; ... } x实例是否保证在整个应用程序中都是单实例 如果如上所述定义了两个翻译单元,该怎么办。他们每个人都有自己的x实例,还是共享?为什么?静态函数具有内部链接,因此每个翻译单元中的每个f都是不同的独立函数,每个翻译单元都有一个x实例 x实例是否保证在整个应用程序中都是单实例 它保证在第一次调用f()时创建。它是一个静

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

foo.cpp:

static void f()
{
    static T x;
    ...
}
x实例是否保证在整个应用程序中都是单实例


如果如上所述定义了两个翻译单元,该怎么办。他们每个人都有自己的x实例,还是共享?为什么?

静态
函数具有内部链接,因此每个翻译单元中的每个
f
都是不同的独立函数,每个翻译单元都有一个
x
实例

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

它保证在第一次调用
f()
时创建。它是一个
静态存储持续时间对象
,这意味着它将与另一个
静态存储持续时间对象
(按与创建相反的顺序)一起销毁

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

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

因为这是一个静态函数。它是翻译单位的本地文件。定义此函数的每个转换单元都有其自身的函数及其内部变量副本。这不会暴露在翻译单元外部,因此只能从翻译单元内部进行