3 개의 경우의 수가 있습니다.
함수 뒤에 const, 매개변수 앞에 const, 리턴 형 앞에 const
1. const 멤버 함수(함수 뒤)
void ConstTest::Test() const 의 경우가 되겠습니다.
이 경우 이 함수를 통해서 멤버 변수의 값이 변경되는 것이 허용되지 않는다는 것입니다.
아래 그림에서는 int a 가 ConstTest의 멤버 변수 이므로, ConstTest::Test() 로 a = 10은 허용되지 않습니다.
2. 매개변수 앞
void ConstTest::Test2( const int b ) 입니다.
매개변수(인자)가 상수화 되는 것입니다. b = 10 은 에러입니다.
3. 리턴 형 앞
const int ConstTest::Test3() 입니다.
이 경우 리턴 하는 int값이 상수화 되는 것입니다.
다만,
ConstTest con;
int i;
i = con.Test3() - 1;
의 경우는 잘 됩니다.
현재 딱히 에러를 발생 시킬 경우가 생각이 안납니다. 언젠가 생각이 나면 추가를... ㅎㅎ;
변수에 관련된 경우의 수는 3가지가 있습니다.
포인터가 가리키는 변수의 상수화, 포인터의 상수화, 둘 다 상수화 로 const 키워드의 사용된 위치를 보면 쉽게 알 수 있습니다.
1. 포인터가 가리키는 변수의 상수화 ( const int* p = &a )
포인터 p가 가르키는 변수를 상수화 하겠다 는 것입니다.
하지만 포인터 p를 통해서 변수 a의 값을 변경하는 것만 막는 것이지, 포인트 p가 가리키는 변수를 상수화 한다는 것은 아닙니다.
2. 포인터의 상수화
포인터 p를 상수화 한다는 것입니다.
즉, 포인터 p가 지니는 주소 값을 변경할 수 없다 는 것 입니다.
대신 포인터 p가 가르키는 변수의 값은 변경할 수 있다 는 것 있습니다.
3. 포인터와 포인터가 가리키는 변수의 상수화
포인터 p와 포인터 p가 가르키는 변수 둘다 상수화 한다 는 것입니다.
출처 : http://teddygom.tistory.com/4
2012년 4월 3일 화요일
inline 함수?
inline 함수란
일반 함수와 달리 어느 한 곳에 자리를 잡고, 그 번지로 점프해서 실행되는 것이 아니라,
함수를 호출하는 위치마다 코드가 통째로 복사되어 들어간다.
장점 : 프로그램 수행 속도가 빨라진다.
단점 : 함수가 호출되는 부분마다 코드가 복사되어 들어가기 때문에,
호출하는 부분이 많아질수록 프로그램의 실행 파일 크기가 커지게 된다.
inline 함수 언제 사용할까?
빈번히 호출되는 함수는 inline 함수로 만드는 것이 효과적 이다.
함수의 크기가 매우 작은 경우에 사용하는 것이 좋다.
만드는 방법
1. 묵시적인 방법
헤더파일에 만드는 방법
class Point
{
int m_nX, m_nY;
void SetPosition(int x, int y) { m_nX = X; m_nY = y; };
};
2. 명시적인 방법
헤더는 아래와 같이,
class Point
{
int m_nX, m_nY;
void SetPosition(int x, int y) ;
};
소스 파일은 아래와 같이,
inline void SetPosition(int x, int y)
{
m_nX = x;
m_nY = y;
}
inline이라고 적어 주기만 하면된다.
[출처] inline 함수|작성자 바리타스KㅡNoBarista
피드 구독하기:
글 (Atom)