본문 바로가기

Study/C++

[C++] Static

Static

  • 전역변수에 선언된 static의 의미는 선언된 파일 내에서만 참조를 허용하겠다는 의미이다.
  • 함수 내에 선언된 static의 의미는 한번만 초기화되고, 지역변수와 달리, 함수를 빠져나가도 소멸되지 않는다.
  • 이러한 static 선언은 공유 변수의 민감도를 낮추기 위해 자주 사용되어 왔다.
  • 특히, static이 선언된 멤버변수는 static 멤버변수, 클래스 변수라고도 한다. 이러한 static 변수는 전역변수처럼 사용도며, 생성된 객체 모두에서 접근이 가능하다.
  • 이러한 static 변수는 생성자에서 초기화 하면 안되는데, 그 이유는 객체가 생성될때마다 해당 static 변수가 할당된 메모리에 그 값이 할당되기 때문이다.
  • 즉, staitc 멤버변수는 어디서든 접근이 가능한 변수이다. 물론, static 멤버가 private로 선언되면 해당 클래스 객체만이 접근 가능하지만, public으로 선언될 경우 클래스의 이름 또는 객체의 이름을 통해 어디서든 접근이 가능하다.
  • static 멤버 함수 역시 static 멤버변수와 그 특성이 동일한다. 즉,
    • 선언된 클래스의 모든 객체가 공유한다.
    • public으로 선언될 시, 클래스의 이름을 이용한 호출이 허용된다.
    • 객체의 멤버로 존재하는 것이 아니다. (별도의 메모리가 할당된다.)
  • static 멤버 함수의 경우, static 멤버함수 내에서는 static 멤버변수와 static 멤버함수만 호출이 가능하다.
  • const static으로 선언되는 멤버변수는 선언과 동시에 초기화가 가능하며, 값이 유지되기 때문에 사용에 용이하다.

  • mutable은 const 함수 내에서의 값의 변경을 예외적으로 허용하는 키워드다.
someclass
.	.	.
private:
	mutable int num;
.	.	.

public:
.	.	.
void SomeFunc() const
{
	num++;
}
  • 다만, 이 키워드 또한 cosnt 선언을 무의미하게 만들기 때문에 사용에 제한을 두어야한다.

'Study > C++' 카테고리의 다른 글

[C++] Polymorphism  (0) 2023.10.09
[C++] Inheritance  (0) 2023.10.09
[C++] Friend  (0) 2023.10.06
[C++] Init  (0) 2023.10.06
[C++] Class, Array and this pointer  (0) 2023.10.06