簡體   English   中英

匿名名稱空間中的靜態結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM