该代码段实际上是做什么的?

#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()函数。

10-06 05:14