나는 정적 전역 함수 (안 정적 클래스, 정적 전역) 내에서 정적 지역 변수 ...이있는 경우정적 전역 기능의 정적 로컬 멤버입니까?
foo.cpp의 :
static void f()
{
static T x;
...
}
를 통해 싱글 보장은 x의 인스턴스 신청?
두 번역 단위가 위와 같이 정의 된 경우 static void f()
. 그들 각각은 자신의 x 인스턴스를 갖거나 공유 할 것인가? 왜?
나는 정적 전역 함수 (안 정적 클래스, 정적 전역) 내에서 정적 지역 변수 ...이있는 경우정적 전역 기능의 정적 로컬 멤버입니까?
foo.cpp의 :
static void f()
{
static T x;
...
}
를 통해 싱글 보장은 x의 인스턴스 신청?
두 번역 단위가 위와 같이 정의 된 경우 static void f()
. 그들 각각은 자신의 x 인스턴스를 갖거나 공유 할 것인가? 왜?
static
기능 내부 링크가, 각각의 변환 단위의 각 f
다른 독립 함수가 될 것이고, 변환 단위 x
인스턴스있을 것이다.
x 인스턴스가 응용 프로그램 전체에 걸쳐 싱글 톤이 보장됩니까?
처음으로 f()
이 호출 될 때 생성된다는 보장이 있습니다. 이것은 static storage duration object
이며, 나머지는 static storage duration object
(생성의 역순)으로 파괴된다는 것을 의미합니다.
이 변수 x
은 f()
함수에서만 볼 수 있습니다.
두 번역 단위가 위와 같이 정적 공백 f()를 정의하면 어떻게 될까요? 그들 각각은 자신의 x 인스턴스를 갖거나 공유 할 것인가? 왜?
정적 함수이기 때문에. 번역 단위에 국한되어 있습니다. 이 함수를 정의하는 각 번역 단위에는 함수와 내부 변수의 자체 복사본이 있습니다. 이것은 번역 단위 외부에 노출되지 않으므로 번역 단위 내에서만 가능합니다.