본문 바로가기

Application-level프로그래밍

Static, Inline, Const member function

inline 함수의 장단점:http://www.cplusplus.com/forum/articles/20600/

참고: Savitch, Absolute C++


 static 키워드는  선언에만 붙이고 구현에는 붙이지 않는다. (변수의 경우에도 비슷하나, 구현대신 초기화 구문에서 키워드를 붙이지 않는다)
호출할 때는 '  클래명::함수이름() ' 처럼 쓴다.
따라서 접근할 수 있는 멤버변수는 static 멤버 (변수 및  함수)이다. 하지만 local 객체,정의 내부에서 생성된 객체들의 함수 호출의 경우는 제한받지 않는다. 참고로 static 멤버는 클래스 정의 외부에서 '데이터타입 클래명::변수명 =  ... ; '처럼 초기화를 할 수 있다. 물론 초기화는 두번다시 되진 않는다. 그리고 이런 초기화는 전형적으로 클래스 정의가 있는 헤더 파일에서 수행된다.


inline 키워드는 클래스 멤버함수의 경우에는 쓰지 않아도 클래스 정의 내부에 함수 구현을 함으로써 Inline함수가 될 수 있다.
참고로 일반 전역 함수는 선언과 정의 모두 앞에 inline을 붙여야 한다. 그리고 현재 대부분의 컴파일러에서 inline 함수는 호출되는 곳과 같은 곳에 정의가 되어있어야한다. 그렇지 않으면 효과를 볼 수 없다. inline 함수는 생성자와 마찬가지로 재귀호출을 사용할 수 없다.

const 멤버 함수를 위한 const 키워드는 함수 선언과 구현 모두에 붙이는데, 붙이는 위치를 주의하자. 이 키워드는 선언부에서
세미콜론 바로 앞에 붙인다. 함수 정의에는 { } 바로 앞에  에 붙인다.  이렇게 명시된 const 멤버 함수에 대해서만
const 객체의 멤버 호출을 할 수 있다. 예를 들어 인자로 받은 const 객체를 가지고 멤버함수를 호출한다고 할 때, 해당 멤버함수가 앞에서 언급한 const 멤버함수가 아니라면 에러가 발생한다.