2012-05-20 5 views
1

이 코드 스 니펫은 실제로 수행합니까?익명 네임 스페이스의 정적 구조체

#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"); 
} 

왜 테스트 기능이 실제로 호출 되나요? "익명"네임 스페이스를 사용하는 이유는 무엇입니까? 나는 오픈 소스 프로젝트의 코드이 조각 ...

+0

'void teste();'...'test();'. 나는 그렇게 생각하지 않는다. –

답변

4

발견이 : 그것은 StaticStruct라는 이름의 종류와의 인스턴스를 정의

struct StaticStruct { 
    StaticStruct() { 
     test(); 
    } 
}; 

static StaticStruct TheStaticSupport; 

:

static struct StaticStruct { 
    StaticStruct() { 
     test(); 
    } 
} TheStaticSupport; 

이 동일합니다 이름이없는 네임 스페이스에서 선언되었으므로 TheStaticSupport이라는 내부 연결을 가진 형식을 사용합니다 (static은 중복 됨).

TheStaticSupport의 생성자는 main()이 입력되기 전에 호출되어 개체를 구성합니다. 이 함수는 test() 함수를 호출합니다.

1

익명 네임 스페이스는 포함 된 개체에 내부 연결을 제공합니다. 정규화 된 이름은 변환 단위 외부의 누구에게도 알 수 없기 때문입니다. 그것은 C.에 이전 static의 정교한 사람의 버전이 유형 StaticStruct의 전역 객체를 선언 할

주 및 (main()를 호출하기 전에 실행) test()를 호출 생성자입니다.

+1

기술적으로 명명되지 않은 네임 스페이스의 엔터티는 외부 연결을 가질 수 있습니다. –

관련 문제