[英]static struct in anonymous namespace
該代碼段實際上是做什么的?
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void test();
namespace {
static struct StaticStruct {
StaticStruct() {
test();
}
} TheStaticSupport;
}
int main(void) {
return 0;
}
void test() {
printf("testing function\n");
}
為什么測試函數實際上被調用? 為什么使用“匿名”名稱空間? 我在一個開源項目中發現了這段代碼。
這個:
static struct StaticStruct {
StaticStruct() {
test();
}
} TheStaticSupport;
等效於此:
struct StaticStruct {
StaticStruct() {
test();
}
};
static StaticStruct TheStaticSupport;
它定義了一個名為StaticStruct
的類型以及一個具有內部鏈接的名為TheStaticSupport
的類型的實例(盡管,因為它是在未命名的命名空間中聲明的,所以static
是多余的)。
在輸入main()
之前,將調用TheStaticSupport
的構造函數以構造該對象。 這將調用test()
函數。
匿名名稱空間為所包含的對象提供了內部鏈接,因為翻譯單元外的任何人都無法知道它們的完全限定名稱。 這是C語言中老static
函數的老練版本。
請注意,您確實聲明了StaticStruct
類型的全局對象,並且其構造函數(在調用main()
之前運行main()
構造函數調用test()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.