다음을 통해 공유


Static (C++)

static 변수, 함수, 클래스 데이터 멤버 및 함수 클래스 선언에 키워드를 사용할 수 있습니다.

기본적으로 정적 기간 및 외부 링크는 모든 블록 외부에서 정의 된 변수 또는 개체를 갖습니다.프로그램이 시작 되 고 프로그램이 끝날 때 할당이 취소 됩니다 때 개체 또는 변수 할당 된 고정 기간을 의미 합니다.외부 링크 이름 변수는 변수가 선언 된 파일 외부에서 볼 의미 합니다.반대로, 내부 링크 이름을 변수가 선언 된 파일 외부에서 볼 수 없습니다 의미 합니다.

static 키워드는 다음과 같은 경우에 사용할 수 있습니다.

  • 변수 또는 함수가 파일 범위에 선언 (글로벌 및/또는 네임 스페이스 범위), 여 static 키워드를 변수나 함수 내부 링크가 있음을 지정 합니다.변수를 선언할 때 변수의 고정 기간이, 컴파일러가 다른 값을 지정 하지 않으면 0으로 초기화 합니다.

  • 함수에서 변수를 선언할 때 해당 static 키워드 지정 변수를 해당 함수 호출 간에 상태를 유지 합니다.

  • 데이터 멤버를 클래스 선언에 선언 하는 경우는 static 멤버의 복사본 하나는 클래스의 모든 인스턴스에서 공유 되는 키워드를 지정 합니다.정적 데이터 멤버는 파일 범위에 정의 되어야 합니다.이름으로 선언 하거나 정수 데이터 멤버 conststatic 는 이니셜라이저를 사용할 수 있습니다.

  • 클래스 선언에 있는 멤버 함수를 선언 하는 경우는 static 함수는 클래스의 모든 인스턴스에서 공유 되는 키워드를 지정 합니다.정적 멤버 함수가 함수 암시적 없기 때문에 인스턴스 멤버에 액세스할 수 없습니다 this 포인터입니다.인스턴스 멤버에 액세스 하려면 함수는 인스턴스 포인터 또는 참조 되는 매개 변수를 선언 합니다.

  • 정적 공용 구조체의 멤버를 선언할 수 없습니다.그러나 익명 공용 구조체 전역적으로 선언 된 명시적으로 선언 되어야 합니다., static.

자세한 내용은 자동, extern, 및 등록.

예제

다음은 변수를 선언 하는 방법 보여 주는 static 함수에서 해당 함수에 대 한 호출 간에 상태를 유지 합니다.

// static1.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
void showstat( int curr ) {
   static int nStatic;    // Value of nStatic is retained
                          // between each function call
   nStatic += curr;
   cout << "nStatic is " << nStatic << endl;
}

int main() {
   for ( int i = 0; i < 5; i++ )
      showstat( i );
}
  

다음 예제에서는 사용 하는 static 클래스에서입니다.

// static2.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class CMyClass {
public:
   static int m_i;
};

int CMyClass::m_i = 0;
CMyClass myObject1;
CMyClass myObject2;

int main() {
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject1.m_i = 1;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject2.m_i = 2;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   CMyClass::m_i = 3;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;
}
  

다음 예제에서는 선언 된 로컬 변수 static 멤버 함수에서입니다.정적 변수는 전체 프로그램을 사용할 수 있습니다. 모든 형식 인스턴스의 정적 변수는 동일한 복사본을 공유합니다.

[!참고]

값을 할당 하는 다중 스레드 응용 프로그램에서 정적 지역 변수를 스레드로부터 안전 하지 않습니다 및 프로그래밍 방식으로 권장 하지 않습니다.

// static3.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
struct C {
   void Test(int value) {
      static int var = 0;
      if (var == value) 
         cout << "var == value" << endl;
      else
         cout << "var != value" << endl;

      var = value;
   }
}; 

int main() {
   C c1;
   C c2;
   c1.Test(100);
   c2.Test(100);
}
  

참고 항목

참조

C + + 키워드

C + + 저장소 클래스

정적 저장소 클래스 지정자

정적 멤버 함수

액세스 제어 및 정적 멤버