첫째, "정적"라는 단어는 C++에서 두 가지 의미가 있습니다 : 그것은 차례로 위치에 따라 다른 효과를 가지고 키워드 static
(참조 할 수 있습니다 )를 사용하거나 변수의 수명을 참조 할 수 있습니다. 모두 변수에 정적 수명이 있습니다.
당신이 말하는 바에 따르면 정적 인 수명의 변수를 찾고 있는데,이 변수는 단일 번역 단위 외부에 표시되지 않습니다. static
를 선언
namespace {
int myWhatever; // No keyword static...
}
클래스의 멤버 변수 (함수 내) 지역 변수처럼 같은 정적 수명이 선언되어이를위한 바람직한 방법은 이름 공간에서 변수를 정의하는 것이다 static
.
이러한 변수는 번역 단위에서 해당 정의 이후 어디에서나 액세스 할 수 있지만 그 밖의 곳에서는 액세스 할 수 없습니다. 그것은 하나의 인스턴스를 가지고 있는데, 이는 이 프로그램의 시작 부분에 오게되고, 프로그램이 실행되는 한 동안 지속됩니다. 생성자가있는 경우 main
전에 호출 된 (또는 동적 객체가로드 될 때 동적 인 연결이 사용되는 경우)이고, exit
에 이 호출 된 후 소멸자가 호출됩니다 (또는 동적 객체가 언로드, 동적 연결 인 경우 사용).
스레드에 관해서
, C++ 11은 스토리지 클래스 지정자 thread_local
을 갖는다 :이 지정 선언 변수는 스레드 그 등가 인 수명으로 인스턴스 스레드 당 있다. 최초 사용 전에 초기화 (구성)되고 스레드가 종료 될 때 이 소멸됩니다. 이것은 정적 인 과 다른 것입니다.
제가 생각하기에 http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program/572550#572550이 좋은 시작 지점입니다. –
@NicolasMartin : 정적 멤버가 여기 좋니? – John