如果我有一個靜態全局函數(不是類的靜態,全局靜態)中靜態局部變量...靜態全局函數的靜態本地成員?
Foo.cpp中:
static void f()
{
static T x;
...
}
是保證整個是單身的X實例應用?
如果兩個翻譯單元如上定義static void f()
會怎麼樣。他們每個人都有自己的x實例,還是會共享?爲什麼?
如果我有一個靜態全局函數(不是類的靜態,全局靜態)中靜態局部變量...靜態全局函數的靜態本地成員?
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實例,還是會共享?爲什麼?
由於這是一個靜態函數。翻譯單位在當地。每個定義該函數的翻譯單元都有自己的函數和其內部變量的副本。這不會暴露在翻譯單元之外,因此它只能來自翻譯單元。