extern :
다른 파일에 있는 전역 변수를 공유하듯이 사용할 수 있는 문법(키워드) extern은 용량이 없다. 그저 다른 파일에 이런 전역 변수가 있다.라는 것을 알려주는 문법임. 그렇기에 extern 키워드가 붙은 변수는 초기화가 불가능하다.
class와 const 1
class{
public :
const static m_static;
}
클래스의 멤버 함수로 선언을 할 수는 있지만! 위와 같이 사용하면 이후로 초기화할 수 없다.
방법1) 모던 C++이후 나타난 선언과 동시에 초기화
class{
public :
const static m_static = 100;
}
방법2) 이니셜라이저를 사용한 초기화 문법
class{
public :
class():m_static(100){}
const static m_static;
}
방법 2가 더 빠르다!
class와 const 2
void draw() const; //이 함수는 읽기 전용 함수이다!
void draw() const{}; //이 함수는 읽기 전용 함수이다!
data 영역 쓰기 /heap 영역 쓰기 / stack 영역 쓰기 모두 가능함
오로지, 멤버 변수 쓰기가 안된다! 그리고 이 함수 안에서 다른 멤버 함수를 넣는 것을 기본적으로 허용하지 않는다. 이유는 호출한 멤버 함수 안에서 쓰기가 발생할 가능성이 있기 때문.
그래서 굳이 써야 한다면 const 멤버 함수를 넣는 것은 가능하다!
같은 함수 이름이지만, const여부에 따라 오버로딩 되어 있을때
void draw() const; //이 함수는 읽기 전용 함수이다!
void draw(); //이 함수는 읽기 전용 함수가 아니다!
CObj obj;
const CObj obj;
이 함수를 가진 ‘객체’가 어떤 객체이냐에 따라 달라짐! const로 객체가 불러지면 읽기 전용 함수가, 그냥 객체가 불러지면 멤버함수가 만들어진다.
mutable이 나타는 것이 이때다!
읽기 전용 함수 임에도 멤버 변수의 쓰기가 필요할 때 사용한다.