본문 바로가기

C++ Language/Tip / Information

상수함수란?!


상수함수는  멤버변수에 값을 입력 시킬 수 없으며, 다른 상수함수만을 사용할 수 있는 함수 입니다.
즉, 반대로 말하면 멤버변수가 아닌 다른 변수는 입력 가능하며, 일반 함수는 사용할 수 없는 함수 입니다.

예를 들면서 설명을 하면,


위에서 void cGet(int value) const 함수에서
멤버 변수로 되어 있는 value에 매개 변수로 입력 된 value 값을 입력 시킬려는
작업을 하였습니다.

하지만 상수함수에서는 멤버 변수에 값을 넣을 수 없기 때문에

error C2166 : l-value specifies const object(l-value가 상수 개체를 지정합니다.)
라는 메세지가 나오면서 에러가 뜨게 됩니다.

그럼 멤버 변수 이외의 변수에는 넣을 수 있는걸 보면,

에러 없이 잘 컴파일 및 실행이 됩니다.
그 이유는 int mvalue; 를 새로 선언을 해 주었기 때문에 상수함수의 멤버변수가 아닌
새로운 지역 변수로 선언을 한 것으로 상수함수에서 멤버변수가 아니기 때문에 에러를
내지 않습니다.

그리고 상수함수에서 상수함수를 부를 경우와 일반 함수를 부를 경우를 보면,


일반함수 사용하였을 경우

error C2662: 'Set' : cannot convert 'this' pointer from 'const class Test' to 'class Test &'
                           ('this' 포인터를 'const class Test'에서 'class Test&'(으)로 변환할 수 없습니다.)

이런 식으로 에러가 나게 됩니다.

하지만 상수함수를 사용하였을 경우에는 컴파일 및 실행이 잘 되었습니다.

그래서 이런 이점을 이용하여 상수함수를 사용하면 좋은 프로그래밍을 할 수 있을 것입니다.

참, 한마디를 더 하자면,

const int Set(const int value);

이런식으로 선언을 한 함수는 상수 함수가 아니라

리턴값과 매개변수값을 상수화 시키겠다는 것입니다.

이 함수를 상수함수 안에서 사용을 하면,

일반 함수로 된다는 걸 잊지 마시길 바랍니다.

'C++ Language > Tip / Information' 카테고리의 다른 글

const_cast 키워드  (0) 2010.02.12
mutable 키워드  (0) 2010.02.12
explicit 키워드  (0) 2010.02.10
C++ 코딩 스타일(제가 사용하는 코딩 스타일입니다.)  (0) 2009.04.29
C++언어가 C언어와 달라진 점  (1) 2009.04.29