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 선언을 무의미하게 만들기 때문에 사용에 제한을 두어야한다.