该代码段实际上是做什么的?
#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");
}
为什么测试函数实际上被调用?为什么使用“匿名” namespace ?我在一个开源项目中发现了这段代码。
最佳答案
这个:
static struct StaticStruct {
StaticStruct() {
test();
}
} TheStaticSupport;
等效于此:
struct StaticStruct {
StaticStruct() {
test();
}
};
static StaticStruct TheStaticSupport;
它定义了一个名为
StaticStruct
的类型和一个具有内部链接的名为TheStaticSupport
的类型的实例(尽管,因为它是在未命名的命名空间中声明的,所以static
是多余的)。在输入
TheStaticSupport
之前,会调用main()
的构造函数来构造对象。这将调用test()
函数。